У меня есть представление списка, содержащее около 200 элементов, я реализовал собственный ArrayAdapter для флажков. Я использую SparseBooleanArray для хранения значений полей.
Все это прекрасно работает, но я не могу графически обновить проверку флажков. Если пользователь нажимает, то флажок установлен. Но если я вызову setChecked в моем коде, это не повлияет на сам блок (поэтому, даже если его значение равно true, оно не отмечено).
Я проверил, пытаясь установить все флажки в 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());
}
}
Спасибо, ребята!