3
我有一個列表視圖,其中有大約200個項目,我爲複選框實現了自定義ArrayAdapter。我使用SparseBooleanArray來存儲框的值。Android - ListView:未選中複選框
所有這些工作正常,但我似乎無法圖形更新框的檢查。如果用戶點擊,那麼該框被檢查。但是,如果我在我的代碼中調用setChecked,它對框本身沒有影響(所以即使它的值爲真,也不會打勾)。
我已經通過嘗試將所有框設置爲true並且沒有運氣進行了測試,即使它們都已檢查完畢,但它們並未顯示它們是。不知道你需要什麼樣的代碼看到,但我已經在我的適配器卡住的好措施:
class CheckBoxArrayAdapter extends ArrayAdapter<String> implements CompoundButton.OnCheckedChangeListener {
private SparseBooleanArray checkedBoxes;
Context context;
public CheckBoxArrayAdapter(Context context, int resource, List<String> objects) {
super(context, resource, objects);
checkedBoxes = new SparseBooleanArray();
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final CheckBox view = (CheckBox) super.getView(position, convertView, parent);
//if(convertView == null) {
//convertView = view.inflate(context, R.layout.list_item, null);
//}
view.setTag(position);
view.setChecked(checkedBoxes.get(position, false));
System.out.println(view.getTag() + ": " + view.isChecked());
view.setOnCheckedChangeListener(this);
return view;
}
public boolean isChecked(int position) {
return checkedBoxes.get(position, false);
}
public void setChecked(int position, boolean isChecked) {
checkedBoxes.put(position, isChecked);
notifyDataSetChanged();
}
public void toggle(int position) {
setChecked(position, !isChecked(position));
}
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkedBoxes.put((Integer) buttonView.getTag(), buttonView.isChecked());
}
}
謝謝你們!
可能不值得一提,但即使設置在XML中啓用的複選框也沒有顯示任何內容,當然我錯過了一些較小的內容,但是我看不到它! – 2011-04-06 16:58:17
出於好奇,爲什麼不直接使用ListView中的多重選擇支持? http://developer.android.com/reference/android/widget/AbsListView.html#attr_android:choiceMode – 2011-04-06 17:07:48
我已經添加了android:choiceMode是多項選擇,但它似乎是普遍的共識是使用自定義適配器。大多數android應用程序似乎都包含複選框。 – 2011-04-06 17:24:39