从列表视图中获取复选框信息

时间:2012-01-16 17:53:13

标签: android android-listview android-checkbox

我有一个活动,其中包含一个列表片段,其中的每个行都有一个复选框。我为复选框设置了onclick xml属性,并执行以下操作以进行测试

public void onBoxClick(View v){
    checkedItems = listview.getCheckedItemPositions();
    int checkedItemsCount = checkedItems.size();

}

checkedItemsCount返回0,我想知道您使用listview.getCheckedItemPositions()检查了哪些项目,但事实并非如此,我怎么知道列表中检查了什么?< / p>

这是我的listfragment创建

@Override
    public void onActivityCreated(Bundle state){
        super.onActivityCreated(state);
        listview = getListView();
        listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        listview.setItemsCanFocus(false);
        setEmptyText("No Bowlers");       
        registerForContextMenu(getListView());
        populateList();
    }

2 个答案:

答案 0 :(得分:0)

post可能有所帮助。它使用自定义ResourceCursorAdapter提供解决方案,为每个CheckBox行提供TextViewListView

要在ListView中选择多个项目,请检查此page。请注意,该示例使用的是ListActivity而不是ListFragment,但您的代码最终会非常相似。只需确保正确实施Fragment生命周期方法(即在ListFragment的{​​{1}}等设置适配器。)。

答案 1 :(得分:0)

我通过自定义适配器的bindView解决了这个问题,我创建了一个ArrayList<Integer>变量

ArrayList<Integer> mCheckedItems = new ArrayList<Integer>();

并在bindView我在复选框上设置checkedchangelistener以查看是否已选中该复选框。如果已经检查过,我将光标所在的数据库中的id放入mCheckedItems Array

适配器:

public class CheckAdapter extends SimpleCursorAdapter{

    Context context;

    public CheckAdapter(Context context, int layout, Cursor c,String[] from, int[] to,int flag) {
        super(context, layout, c, from, to);
        this.context = context;
    }

    @Override
    public void bindView(View view,Context context,Cursor cursor){
        final String name = cursor.getString(cursor.getColumnIndex(BowlersDB.NAME));
        final int id = cursor.getInt(cursor.getColumnIndex(BowlersDB.ID));
        TextView tv = (TextView)view.findViewById(R.id.nameCheckTV);
        tv.setText(name);

        CheckBox cb = (CheckBox)view.findViewById(R.id.checkBox1);
        cb.setOnCheckedChangeListener(new OnCheckedChangeListener(){

            @Override
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {

                if(isChecked){
                    mCheckedItems.add(id);
                }else if(!isChecked){
                    for(int i=0; i< mCheckedItems.size(); i++){
                        if(mCheckedItems.get(i) == id){
                            mCheckedItems.remove(i);
                        }
                    }                   
                }

            }

        });
    }

将id插入数组后,我使用数组列表来使用它们我需要的方式