如何取消选中setItemChecked()检查的项目?

时间:2011-11-30 13:39:20

标签: android listview multiple-select

我正在使用带有MULTIPLE_CHOICE的ListView,并使用setItemChecked()方法获取所选项目。

它工作正常,因为我能够看到以前检查过的项目。 问题是,如果我取消选中以前检查过的项之一,然后按custList.getCheckItemIds()获取已检查项目的列表 数组仍然有我取消选中的项目。

任何人都可以告诉我,这是应该发生还是我错过了什么?

3 个答案:

答案 0 :(得分:1)

在这里你必须调用setOnCheckedChangeListener,你必须管理这个监听器块中的代码。

checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
              // Write and manage your code here.
        }
});

答案 1 :(得分:0)

如果您只是试图找出在任何给定时间检查的项目,您可以从ListView获取SparseBooleanArray,并使用for循环迭代它。例如:

SparseBooleanArray checked = list.getCheckedItemPositions();

for (int i = 0; i < checked.size(); i++){
    if (checked.get(i))
        //the item at index i is checked, do something
    else
        //the item is not checked, do something else
}

答案 2 :(得分:0)

这样:

SparseBooleanArray checked = list.getCheckedItemPositions();

for (int i = 0; i < checked.size(); i++){
    if (checked.get(i))
        //the item at index i is checked, do something
    else
        //the item is not checked, do something else
}

不行。

关注Multiple Contact Picker List [getCheckedItemPositions()]

应该没问题。

SparseBooleanArray selectedPositions = listView.getCheckedItemPositions();

for (int i=0; i<selectedPositions.size(); i++) {
    if (selectedPositions.get(selectedPositions.keyAt(i)) == true) {
        //do stuff
    }
}