2

我正在使用带有复选框的列表视图并将其设置为 multi_choice。

如果我正在做一次 getCheckeItemPositions 来获取选中的列表视图项目,那么一切正常。

但是,如果我再次执行此操作并取消选中其中一项,它仍然算作已选中。我只能将更多项目添加到“已检查”。如何解决这个问题?

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);   
}
4

2 回答 2

1

我遇到了同样的问题......所以创建看起来像 multi_choice listview 的布局并在您的自定义适配器中膨胀并在适配器本身中注册像 OnClickListener() 监听器这样的事件..

于 2012-05-14T12:10:02.877 回答
1

我已经这样解决了:

for(int i = 0; i< sp.size();i++){
    if(sp.valueAt(i)==true){
                Log.d("Watcher","Arrayfound:" + info.getAdapter().getItem(sp.keyAt(i)).toString().split(":")[0]);
                lTransfer.add(info.getAdapter().getItem(sp.keyAt(i)).toString().split(":")[0]);
                }
}
于 2012-05-14T12:43:25.827 回答