【发布时间】:2010-10-22 12:52:08
【问题描述】:
该应用有一个启用了多选功能的 ListView,在 UI 中它按预期工作。但是当我使用此代码读出值时:
Log.i(TAG,"Entered SearchActivity.saveCategoryChoice()");
SparseBooleanArray checkedPositions = categorySelector.getCheckedItemPositions();
Log.i(TAG,"checkedPositions: " + checkedPositions.size());
if (checkedPositions != null) {
int count = categoriesAdapter.getCount();
for ( int i=0;i<count;i++) {
Log.i(TAG,"Selected items: " + checkedPositions.get(i));
}
}
无论每个复选框处于什么状态,我都会得到这个输出:
Entered SearchActivity.saveCategoryChoice()
checkedPositions: 0
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
SparseBooleanArray 似乎为任何不存在的项目返回 false,因此问题的根源似乎是 getCheckedItemPositions() 返回一个空数组。该方法的行为就像 ListView 中没有项目,但确实存在。
我可以从文档中看到,当 ListView 未设置为多选时不会返回任何值,但使用以下语句:
categorySelector.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
在我的场景中,我使用的适配器是 ArrayAdapter 的子类,并且(没有任何确凿证据)我怀疑这可能是原因,但我不明白为什么它不应该工作。
【问题讨论】:
-
很遗憾我没有早点看到这个问题(几年),但是您是如何检查 ListView 的项目的?上面的代码和结果都没有明显的错误。如果您使用 categorySelector.setItemChecked(int position, boolean value) 设置选中状态,它应该可以工作。