4

我在列表视图中使用复选框,并希望在列表视图中获取所选项目。问题是即使在列表视图中选中复选框,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请帮助我。在此先感谢。

4

4 回答 4

1

使用 SparseBooleanArray 的一些提示:

设 sba 为 SparseBooleanArray 对象。

sba.size()返回 Array 中的项目总数。现在数组包含一个整数值到位置的映射,在这种情况下,所选列表视图项的位置被映射到相应的布尔状态。用于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)));
于 2017-06-12T16:24:48.630 回答
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);
            }
于 2014-01-05T02:07:50.650 回答
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 */
 }

您将在此线程中找到此答案:如何从多选列表视图中获取所选项目

于 2013-09-05T12:46:22.027 回答
0

您可以通过将 sparsebooleanarray 转换为字符串,然后将其拆分为“,”来获取其大小。但是让我告诉你,这不是一个非常值得信赖的方法,据我所知,起初它只获取检查的项目,它存储:{0=true, 1=true, 2=true}但假设你以某种方式保存了它的状态(使用共享首选项等)然后取消选中选中的项目,然后返回, {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 的大小时要小心,即使它返回一个计数。

于 2015-12-17T08:24:50.327 回答