你需要的是讓你的複選框數據保持你的適配器和列表視圖的對象。布爾數組的hashmap應該就足夠了。
private HashMap<String, boolean[]> contactMap;
我想像你可以在一些數據庫的方法或東西加載這一點,你可以有這個人的名字,像「喬」,作爲標識符如果需要的話。數組索引將對應每個列表視圖行中的複選框。然後在你的適配器,我想像是一個CursorAdapter
,你可以有以下幾點:
private boolean[] contactObj;
public void setContactObj(boolean[] contactObj) {
this.contactObj = contactObj;
notifyDataSetChanged();
}
public boolean[] getContactObj() {
return contactObj;
}
@Override
public void bindView(View view, Context context, Cursor c) {
final int position = c.getPosition();
final CheckBox cb = (CheckBox) view.findViewById(R.id.checkbox);
cb.setChecked(contactObj[position]);
cb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (cb.isChecked()) {
contactObj[position] = true;
} else {
contactObj[position] = false ;
}
}
});
}
基本上,你有一個只有一個boolean[]
這是能夠在你的列表視圖調整複選框能力的適配器,在複選框被點擊時修改爲布爾型[],然後在您仍然需要它的情況下返回它。
「一旦適配器被新光標項改變,我無法跟蹤之前選擇的項目。」當然,你可以......只需鍵入你的列表視圖的源代碼。 – logray