我正在使用listview中的复选框,并希望在ListView中获取所选项。问题是,即使在listView中选中了复选框,SparseBooleanArray.size()也始终保持为0。我搜索了很多但是问题仍然存在。这是我正在使用的代码:
checked = lvShowContacts.getCheckedItemPositions();
if(checked != null)
{
for (int i=0; i<checked.size(); i++) {
if (checked.valueAt(i)) {
String item = lvShowContacts.getAdapter().getItem(
checked.keyAt(i)).toString();
Log.v("Message",item + " was selected");
}
}
Log.v("Message","checked.size() is "+ checked.size());
// else
//the item is not checked, do something else
}
我总是以checked.size()
为0
。请帮助我。谢谢。
答案 0 :(得分:1)
使用SparseBooleanArray的一些提示:
让sba成为SparseBooleanArray对象。
sba.size()
返回数组中的项目总数。
现在,数组包含Integer值到position的映射,在这种情况下,所选listview项的位置被映射到相应的布尔状态。
使用sba.keyAt(i)
查找布尔数组的整数值,然后使用sba.get(sba.keyAt(i))
查找映射到整数键的相应布尔值。
您可以像这样遍历数组:
SparseBooleanArray sba= getListView().getCheckedItemPositions();
for(int i=0;i<sba.size();i++){
Log.i("SparseBoolaeanArray","Element "+sba.keyAt(i)+":status::"+sba.get(sba.keyAt(i)));
答案 1 :(得分:0)
如果要循环选定的行
int len = listView.getCount();
SparseBooleanArray checked = listView.getCheckedItemPositions();
for (int i = 0; i < len; i++)
if (checked.get(i)) {
/* do whatever you want with the checked item */
}
您将在此主题中找到此答案:How to get Selected items from Multi Select List View
答案 2 :(得分:0)
对我来说,checked.size()总是返回0并且值最初达到12但是具有正确的键/值对。因此,我只是使用ListView的getCount来获取迭代的限制,并在遇到IndexOutOfBoudsException时完成。虽然很丑,但到目前为止它仍有效。
SparseBooleanArray checked = this.list.getCheckedItemPositions();
ArrayList<String> ids = new ArrayList<String>();
try {
for (int i = 0; i < this.list.getCount(); i++){
if (checked.valueAt(i)){
Object r = this.list.getItemAtPosition(checked.keyAt(i));
ids.add(r.getId());
}
}
} catch (IndexOutOfBoundsException e) {
Log.e(TAG, e.getMessage(),e);
}
答案 3 :(得分:0)
您可以通过将sparsebooleanarray转换为toString然后将其拆分为“,”来获取sparsebooleanarray的大小。但是让我告诉你,这不是一个非常值得信赖的方法,从目前为止我所知道的,起初它只获得检查的项目,它存储:{0=true, 1=true, 2=true}
但是假设你以某种方式保存了它的状态(使用共享的pref)等等,然后取消选中已选中的项目,然后返回,
{0=true, 1=true, 2=false},ie, this time the size of the array will be 3 even when true state is only carried by 2.
所以在依赖sparsebooleanarray的大小时要小心,即使它返回一个计数。