2013-03-07 121 views
0

我有一個自定義組件作爲表(標題+正文)。在我的頭文件中,我試圖添加「filterViews」,具體取決於填充在表格每一列中的數據類型。 所以我有一個布爾類型的列,表示爲不可點擊的複選框。微調自定義baseadapter

我試圖創建標題單元格微調有三個更多鈔票的選擇:

  • 清除過濾器(串)
  • 選中的複選框
  • 未選中的複選框

我很努力正確地獲取此代碼。這裏是我的BaseAdapter代碼:

public class BooleanAdapter extends BaseAdapter 
{ 
    private List<Object> values = new LinkedList<Object>(); 

    public BooleanAdapter(Context context) 
    { 
     TextView txt = new TextView(context); 
     txt.setText("Clear filter"); 
     values.add(txt); 

     CheckBox cb1 = new CheckBox(context); 
     cb1.setClickable(false); 
     cb1.setChecked(true); 
     values.add(cb1); 

     CheckBox cb2 = new CheckBox(context); 
     cb2.setClickable(false); 
     cb2.setChecked(false); 
     values.add(cb2); 
    } 

    @Override 
    public int getCount() 
    { 
     return values.size(); 
    } 

    @Override 
    public Object getItem(int position) 
    { 
     return values.get(position); 
    } 

    @Override 
    public long getItemId(int position) 
    { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     return (View) values.get(position); 
    } 
} 

我在代碼中創建微調:

Spinner spinner = new Spinner(getActivity()); 
BooleanAdapter adapter = new BooleanAdapter(getActivity()); 
spinner.setAdapter(adapter); 

我得到這個錯誤:

java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 
at android.widget.ListView.measureScrapChild(ListView.java:1181) 
at android.widget.ListView.measureHeightOfChildren(ListView.java:1264) 
at android.widget.ListView.onMeasure(ListView.java:1173) 
at android.view.View.measure(View.java:10853) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4353) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1284) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:613) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:519) 
at android.view.View.measure(View.java:10853) 

我感謝所有幫助。我仍然是Android新手(3周),所以我可能缺少一些基本的東西。謝謝。

回答

1

必須將LayoutParameters設置爲適配器中的每個項目。

public BooleanAdapter(Context context) 
{ 
    AbsListView.LayoutParams lp = new AbsListView.LayoutParams(AbsListView.LayoutParams.WRAP_CONTENT, AbsListView.LayoutParams.WRAP_CONTENT); 
    TextView txt = new TextView(context); 
    txt.setText("Clear filter"); 
    txt.setLayoutParams(lp); 
    values.add(txt); 

    CheckBox cb1 = new CheckBox(context); 
    cb1.setClickable(false); 
    cb1.setChecked(true); 
    cb1.setLayoutParams(lp); 
    values.add(cb1); 

    CheckBox cb2 = new CheckBox(context); 
    cb2.setClickable(false); 
    cb2.setChecked(false); 
    cb2.setLayoutParams(lp); 
    values.add(cb2); 
}