Estoy haciendo mi primera aplicación de Android y tengo un problema por el que no puedo encontrar la respuesta en ningún lugar de Google.Android Cómo saber qué casilla de verificación está seleccionada
Quiero una lista de elementos con casillas de verificación. Quiero que se pueda hacer clic tanto en el elemento mismo como en la casilla de verificación.
public class MyItem extends ListActivity {
private ArrayList<MyItem> items;
public void onCreate(Bundle savedInstanceState) {
/* code which creates instances of MyItem and inserts them on the *list* variable */
MyArrayAdapter adapter = new MyArrayAdapter(this, R.layout.my_item, list);
setListAdapater(adapter);
setContentView(R.layout.items_list);
}
public onListItemClick(ListView l, View v, int position, long id){
//handles the click on an item
}
public class MyArrayAdapter extends ArrayAdapter<MyItem>{
private MyItem item;
public MyArrayAdapter(Context context, int resourceId, ArrayList<MyItem> list){
//code for the constructor
}
public getView(int position, View convertView, ViewGroup parent){
convertView = inflater.inflate(resourceId, null);
this.item = list.get(position);
if (this.item == null) {
return convertView;
}
else{
if (resourceId == R.layout.my_item) {
final CheckBox cb = (CheckBox)convertView.findViewById(R.id.checkbox);
if(cb != null){
//initially
if(chosen)
cb.setChecked(true);
else
cb.setChecked(false);
//set listener
cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
if(cb.isChecked())
chosen = true;
else
chosen = false;
}
});
}
}
return convertView;
}
}
}
No se preocupe por la variable elegida. Lo escribí para simplemente el código. En realidad, corresponde a un valor en una base de datos. Hacer clic en un elemento funciona bien. Sin embargo, cuando hago clic en una casilla de verificación lo que sucede es lo siguiente:
- la casilla en la que he hecho clic aparece seleccionada (esto es el trabajo de la interfaz de usuario del Android)
- la casilla de verificación que internamente se comprueba es el último en la pantalla sea la que sea, es decir, si mi pantalla muestra 8 elementos y hago clic en uno de ellos (no importa cuál), el cheque aparece en la casilla de verificación correcta pero internamente, el 8º elemento es el que se verifica.
Agradecería cualquier ayuda que pudiera proporcionarme. Gracias por adelantado.
funcionó como un encanto salvo por un detalle. El setTag/getTag tuvo que ser hecho no a la vista, sino a la casilla de verificación. Gracias, muchas gracias: D –
Actualizado para corregir el error que usted indicó, solo en caso de que alguien más encuentre este código. – kabuko