2014-06-18 23 views
0

我已經成功地創建了具有可變數目的數據列的UI,用於顯示和輸入數據。 現在做同樣爲我的ListViewAndroid創建一個ListView,其中包含可變數量的列,其中包含TextViews

的的ListView listXYVals以下面的方式定義(I省略不相關的元素):

<LinearLayout 
android:id="@+id/displayValues" 
android:layout_width="fill_parent" 
android:layout_height="0dp" 
android:layout_weight="1" 
android:orientation="vertical" 
> 
<ListView 
    android:id="@+id/listXYVals" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="top" 
    android:listSelector="@android:color/darker_gray" 
/> 
</LinearLayout> 

然後程序處理通過參考R.layout的信息。 xy_list_item定義中顯示的列項的固定數量:

ListView m_listView = (ListView) 
m_thisView.findViewById(R.id.listXYVals); 
m_adapter = new InputNewDataAdapter(m_parentActivity, **R.layout.xy_list_item**, 
     m_rowItems); 

我一直在努力尋找一種方式來代替引用xy_list_item.xml其固定列數由動態創建的LinearLayout包含可變數量的項目。我可以用所需的成員創建一個LinearLayout對象,但不知道如何將信息傳遞給ArrayAdapter。問題的一部分是知道如何闡明問題。我認爲,如果我可以動態地創建自己的資源,所有的都可以解決,但這可能沒有意義。 關於策略的信息將會有所幫助。

大衛Butland

+0

如果你正在尋找的是如何創建一個自定義適配器的ListView,你可能想在這裏http://www.vogella.com/tutorials/看看AndroidListView/article.html#adapterown_custom – DDsix

+0

在getView()中,您可以簡單地設置文本視圖的可見性。 – greenapps

回答

0

如果我明白你的問題正確的問題可以通過以下方式來解決(抱歉,如果這是不理想,但它應該給一個總的想法)。

ColumnValues.java

public class ColumnValues { 
    public List<String> columns = new ArrayList<>(); 
} 

listview_activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
     <ListView 
       android:visibility="visible" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:id="@+id/listview"/> 
</LinearLayout> 

ListViewActivity.java

ListView listView = (ListView) findViewById(R.id.listview); 
listView.setAdapter(new ListViewAdapter(ListViewActivity.this, result)); 

ListViewAdapter.java

public class ListViewAdapter extends ArrayAdapter<ColumnValues> { 
    private ListViewActivity mActivity; 
    private List<ColumnValues> mList; 

    public ListViewAdapter(ListViewActivity activity, List<ColumnValues> list) { 
     super(activity, 0, list); 

     mActivity = activity; 
     mList = list; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    int numOfColumns = mList.get(position).columns.size(); 
    LinearLayout layout; 

    if (convertView == null) { 
     convertView = new LinearLayout(mActivity); 

     layout = (LinearLayout) convertView; 
     for (int i = 0; i < numOfColumns; i++) { 
      TextView textView = new TextView(mActivity); 
      LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
        500, LinearLayout.LayoutParams.WRAP_CONTENT); 
      layoutParams.setMargins(20, 20, 20, 20); 
      textView.setLayoutParams(layoutParams); 

      layout.addView(textView); 
     } 
    } 

    layout = (LinearLayout) convertView; 

    for (int i = 0; i < numOfColumns; i++) { 
     ((TextView) layout.getChildAt(i)).setText(mList.get(position).columns.get(i)); 
    } 

    return convertView; 
} 
相關問題