我正在尝试制作类似 gmail 的列表视图。That is, initially, the listview is in single choice mode, but when a checkbok is selected, it becomes multiple choice.
这是我到目前为止所拥有的:
SimpleCursorAdapter dataSource = new SimpleCursorAdapter(this, R.layout.listitem, cursor,
new String[]{"_id","a","b","c","d","e","f","g","h"},
new int[] { R.id.checkBox1, R.id.a, R.id.b, R.id.c, R.id.d, R.id.e}
// all of these are a part of my list item custom layout.
);
dataSource.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View aView, final Cursor c, int i) {
String s=c.getString(i);
String toset="";
TextView tv = i==0?null: (TextView) aView;
if (i==0){
if(chkL==null){
chkL=new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton cb1, boolean isChecked) {
CheckBox cb=(CheckBox) cb1;
chkid[c.getPosition()]=isChecked;
if(lv.getChoiceMode()!=lv.CHOICE_MODE_MULTIPLE){
lv.setChoiceMode(lv.CHOICE_MODE_MULTIPLE);
}
lv.setItemChecked(c.getPosition()+1,isChecked);
log(isChecked+" selected "+(c.getPosition()+1));
}
};
}
CheckBox cb= (CheckBox) aView;
cb.setOnCheckedChangeListener(chkL);
return (i==0);
}};
目前,我正在尝试通过按下复选框来至少使该项目“被选中”。我正在使用c.getPosition()+1
(cursor's position) 来获取被点击的列表项的位置。但这似乎总是返回1
或有时返回随机值。
更新: 看起来它总是返回 1,但是当我遍历 getCheckedItemPositions() 时,我看到那个项目没有。10人被选中。点击另一个复选框,光标位置再次为 1,但第 11 项将被选中,依此类推。但是,如果我在复选框之外点击,则会选择正确的项目。
此外,在选择一个复选框时,如果向下滚动,您会看到其他几个复选框已被选中。(我的列表中有大约 255 项)。我认为这是由于android重用相同复选框的方式?