在Android ListView中选择所有复选框

4

在我的应用程序中,我尝试创建一个带有多个复选框的列表。

为此,我尝试使用一个ListView,并在ListView中使用android.R.layout.simple_list_item_multiple_choice进行多项选择。

我的XML中的ListView如下:

<ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="468dp"
        android:choiceMode="multipleChoice"
        android:divider="#b5b5b5"
        android:dividerHeight="1dp" >

我使用一个CheckBox来选择/取消选择ListView中的所有CheckBox,如下所示:

   <CheckBox
            android:id="@+id/select_all"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:layout_column="2"
            android:textSize="18dp"
            android:text="Select all" />

并且Java代码如下,...

selectall.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            int size = 0;
            boolean isChecked = selectall.isChecked();
            if (isChecked == true) {
                size = getListView().getCount();
                for (int i = 0; i <= size; i++)
                    l1.setItemChecked(i, true);
            } else if(isChecked==false)
            {
                size = getListView().getCount();
                for (int i = 0; i <= size; i++)
                    l1.setItemChecked(i, false);
            }
        }
    });

我已将l1指定为我的ListView。现在我的全选复选框可以很好地用于选择/取消选择ListView中的所有复选框。
但是,如果我在单击全选复选框后取消选择其中一个项目,则不会取消选择。
如果我手动选择列表中的所有复选框,则需要自动选中全选CheckBox。
我使用以下代码作为ListAdapter。
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>
       (this,Android.R.layout.simple_list_item_multiple_choice,list);
     setListAdapter(adapter1);
     l1=getListView();

I'm trying to achieve this Solution..


监听列表中文本框的复选框更改事件。 - Triode
我们如何为列表中的复选框设置监听? - MGR
为列表中的复选框添加点击监听器。 - Triode
保存复选框状态并为每次点击编写onclick监听器,并检查保存的状态。 - APriya
这不是自定义的ListView...请查看我的更新问题...我在我的ListView中使用了Android.R.layout.simple_list_item_multiple_choice。 - MGR
1个回答

1
你可以使用HashMap或一个theObjectRow的列表来跟踪哪个复选框被选中了,然后当你点击checkAll时,将列表中的所有布尔值更新为true,并执行yourAdapter.notifyDataSetChanged();当然,在你的适配器(例如BaseAdapter)中,你需要在GetView中使用HashMap/List来初始化单元格。
if(list.get(position).isChecked()){
    cellHolder.checkBox.setChecked(true);
}
else{
    cellHolder.checkBox.setChecked(false);
}

所有布尔值都为真,因此所有复选框都将被选中(取消选中的逻辑相同)
希望这有所帮助 祝好运

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接