2013-03-07 85 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); 
}