Tengo un Android ListView
cuyos elementos tienen una casilla de verificación.CheckBox cambia el valor dos veces
La casilla de verificación está marcada de forma predeterminada. Una vez desactivada, debe eliminarse de la lista.
El problema es que se está onCheckedChanged
disparó dos veces: cuando toco la casilla de verificación para desactivarla (con isChecked
false
) y después se quita el elemento (con isChecked
true
).
Este es el código correspondiente de mi 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é estoy haciendo mal?
¿Qué hace el método 'remove()', ya que no es un método en 'ListAdapter'? – CommonsWare
Estoy usando un ArrayAdapter. De acuerdo con el código fuente de Android, el método de eliminación elimina el elemento de la matriz y notifica que los datos se han cambiado. – hpique