编辑:好的,我找到了一个解决方案.不知道这是正确的解决方案,但它的工作正常.添加到以下代码.
我试图允许用户从清单中选择一些目录,并在点击“提交”按钮时返回.这是我的代码片段.它使用/ sdcard /上的所有目录填充ListView,并在提交时初始选择(我选择的是多少),日志显示返回的正确选择.但是,如果我取消选中项目,然后再次单击“提交”,它仍然显示为全部被选中.我需要写一个处理程序来取消选中项目吗?我以为这是由choiceMode选择照顾的?谢谢!
private SparseBooleanArray a; directoryList.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,directoryArray)); submitButton = (Button)findViewById(R.id.submit_button); submitButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { a = new SparseBooleanArray(); a.clear(); a = directoryList.getCheckedItemPositions(); for (int i = 0; i < a.size(); i++) { //added if statement to check for true. The SparseBooleanArray //seems to maintain the keys for the checked items,but it sets //the value to false. Adding a boolean check returns the correct result. if(a.valueAt(i) == true) Log.v("Returned ",directoryArray[a.keyAt(i)]); } } });
解决方法
我知道你找到了一个适合你的解决方案,但更简单和更简单的解决方案大部分时间都可能是这样的(我想要保留选中元素的所有id):
(在我的ListActivity):
SparseBooleanArray selectedPos = getListView() .getCheckedItemPositions(); ListAdapter lAdapter = getListAdapter(); List<Long> ids = new LinkedList<Long>(); for (int i = 0; i < lAdapter.getCount(); i++) { if (selectedPos.get(i)) { ids.add(lAdapter.getItemId(i)); } }