Mam Androida ListView
, którego elementy mają pole wyboru.CheckBox zmienia wartość dwukrotnie
Pole wyboru jest domyślnie zaznaczone. Po usunięciu zaznaczenia należy go usunąć z listy.
Problemem jest to, że onCheckedChanged
jest zwolniony dwa razy: kiedy dotknij pole wyboru, aby je odznaczyć (z isChecked
false
) i po tym, jak usunąć element (z isChecked
true
).
to odpowiedni kod mojego ArrayAdapter:
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item, parent, false);
holder = new ViewHolder();
holder.check = (CheckBox) convertView.findViewById(R.id.check);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final Object item = this.getItem(position);
holder.check.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isChecked) {
remove(item); // This somehow calls onCheckedChanged again
}
}
});
return convertView;
}
Co robię źle?
Co robi metoda 'remove()', ponieważ nie jest to metoda na liście 'ListAdapter'? – CommonsWare
Używam ArrayAdapter. Zgodnie z kodem źródłowym Androida metoda remove usuwa element z tablicy i informuje, że dane zostały zmienione. – hpique