我正在使用带有复选框的列表视图并将其设置为multi_choice。
如果我正在做一次getCheckeItemPositions来获取已检查的listview项目,那么一切正常。
但是,如果我再次执行此操作并取消选中其中一项,则仍将其视为已选中。 我只能添加更多项目来“检查”。怎么解决这个问题?
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);
}
答案 0 :(得分:1)
我面临同样的问题......所以创建看起来像multi_choice listview的布局并在自定义适配器中膨胀,并在适配器本身中注册OnClickListener()侦听器等事件。
答案 1 :(得分: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]);
}
}