2 ssummeraw ssummeraw 于 2013.07.11 11:25 提问

更新 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);   
}

3个回答

woailuovswho
woailuovswho   2015.01.08 10:17

我也是最近在研究这个问题,这个方法好像是选择了就会加进去,但是要判断是否选中的话,需要根据sp.get(i)的值为true或false判断,true为选中

Elete
Elete   2016.02.18 23:01
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();
Elete
Elete   2016.02.18 23:01
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();
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!