问题描述
- 更新 getCheckedItemPositions() 方法
- 我使用 listview 中的 checkboxes,然后设置成 multi_choice。
如果我执行一次 getCheckeItemPositions 来获的选中的 listview 选项,程序可以很好的运行。
但是如果我再执行一次,取消其中的一些选项,系统依然认为还是选择了的。我只能添加更多的 items 来""checked"",如何解决这个问题?sp = new SparseBooleanArray(); lTransfer = new ArrayList<String>(); ListView info = (ListView)findViewById(R.id.info); sp = info.getCheckedItemPositions(); Log.d(""Watcher""Arraysize:"" + sp.size()); for(int i = 0; i< sp.size();i++){ Log.d(""Watcher""Arrayfound:"" + info.getAdapter().getItem(sp.keyAt(i)).toString().split("":"")[0]); lTransfer.add(info.getAdapter().getItem(sp.keyAt(i)).toString().split("":"")[0]); }public void updateInfo(){ ListView info = (ListView)findViewById(R.id.info); info.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); info.setItemsCanFocus(false); info.setOnItemClickListener(new InfoListener()); lSpin = new ArrayAdapter<String>(this R.layout.list_item lToAdd); info.setAdapter(lSpin); }
解决方案
我也是最近在研究这个问题,这个方法好像是选择了就会加进去,但是要判断是否选中的话,需要根据sp.get(i)的值为true或false判断,true为选中
解决方案二:
List<String> checklist = new ArrayList<String>(); int id = item.getItemId(); if (id == R.id.deleteId) { // 获得选中的item对象 // 此对象中存储的是你选择过的item对象postion/checnked的值 SparseBooleanArray sp = lsv.getCheckedItemPositions(); // Log.i(""TAG""size:"" + sp.size()); for (int i = 0; i < sp.size(); i++) { int key = sp.keyAt(i); boolean value = sp.valueAt(i); Log.i(""tag"" key + ""/"" + value); if (value) { checklist.add(list.get(key)); } } // 从list集合中删除选中的item对象 list.removeAll(checklist); // 清除checkedtextview lsv.clearChoices(); // 更新listveiw中数据的显示 adapter.notifyDataSetChanged();
解决方案三:
List<String> checklist = new ArrayList<String>(); int id = item.getItemId(); if (id == R.id.deleteId) { // 获得选中的item对象 // 此对象中存储的是你选择过的item对象postion/checnked的值 SparseBooleanArray sp = lsv.getCheckedItemPositions(); // Log.i(""TAG""size:"" + sp.size()); for (int i = 0; i < sp.size(); i++) { int key = sp.keyAt(i); boolean value = sp.valueAt(i); Log.i(""tag"" key + ""/"" + value); if (value) { checklist.add(list.get(key)); } } // 从list集合中删除选中的item对象 list.removeAll(checklist); // 清除checkedtextview lsv.clearChoices(); // 更新listveiw中数据的显示 adapter.notifyDataSetChanged();
时间: 2025-01-01 19:13:20