J'ai un Android ListView
dont les articles ont une case à cocher.CheckBox change la valeur deux fois
La case à cocher est cochée par défaut. Une fois décochée, elle devrait être retirée de la liste.
Le problème est que onCheckedChanged
est Licenciement deux fois: quand je tape la case pour la décocher (avec isChecked
false
) et après je supprimer l'élément (avec isChecked
true
).
Ceci est le code correspondant de mon 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;
}
Qu'est-ce que je fais mal?
Que fait la méthode 'remove()', puisque ce n'est pas une méthode sur ListAdapter'? – CommonsWare
J'utilise un ArrayAdapter. Selon le code source Android, la méthode remove supprime l'élément du tableau et notifie que les données ont été modifiées. – hpique