Ich habe ein Android ListView
, deren Artikel ein Kontrollkästchen haben.CheckBox ändert Wert zweimal
Das Kontrollkästchen ist standardmäßig aktiviert. Einmal deaktiviert, sollte es aus der Liste entfernt werden.
Das Problem ist, dass onCheckedChanged
zweimal gebrannt wird: wenn ich das Kontrollkästchen tippen, um es zu deaktivieren (mit isChecked
false
) und nachdem ich den Artikel entfernen (mit isChecked
true
).
Dieser der entsprechende Code meiner 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;
}
Was mache ich falsch?
Was macht die 'remove()' Methode, da dies keine Methode auf 'ListAdapter' ist? – CommonsWare
Ich verwende einen ArrayAdapter. Gemäß dem Android-Quellcode entfernt die remove-Methode das Element aus dem Array und benachrichtigt, dass die Daten geändert wurden. – hpique