20/09/2012, 06:10
|
| | Fecha de Ingreso: julio-2012
Mensajes: 2
Antigüedad: 12 años, 5 meses Puntos: 0 | |
Problema Listview + checkbox Saludos.
Estoy intentando hacer un Listview con icono + textview + checkbox por cada elemento. Está operativo en general, pero no consigo "guardar" los checkbox seleccionados una vez ejecutada la aplicación. Vamos, que el checkeo de los checkbox en ejecución no tiene repercusión en el Array que guarda los datos.
Dejo el código a ver si alguien puede echarme una mano. Gracias anticipadas.
Opción.java :
Código:
public class Opcion {
// Cada opción tiene un título, un icono y un boolean
private String titulo;
private int icono;
private boolean ch;
public Opcion(String titulo, int icono, boolean ch){
this.setTitulo(titulo);
this.setIcono(icono);
this.setCh(ch);
}
// Definimos los getters y setters de la clase
public boolean getCh(){
return ch;
}
public void setCh(boolean ch){
this.ch = ch;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public int getIcono() {
return icono;
}
public void setIcono(int icono) {
this.icono = icono;
}
}
AdaptadorOpciones.java :
Código:
//Definimos el Adaptador que dibuja la opciones del listado de la ListActivity
class AdaptadorOpciones extends ArrayAdapter<Opcion> {
Activity contexto;
private Opcion[] datos;
// Contructor del adaptador usando el contexto de la aplicación actual
AdaptadorOpciones(Activity contexto, Opcion[] datos) {
// Llamamos al constructor de la clase superior
super(contexto, R.layout.opcion, datos);
// Guardamos estas variables de la aplicación principal para usarlas luego
this.datos = datos;
this.contexto = contexto;
}
// Método que dibuja la Vista de cada Opción
// Se invoca cada vez que haya que mostrar un elemento de la lista.
public View getView(int position, View convertView, ViewGroup parent)
{
// Vista que Android indica como reutilizable (memoria que reutilizamos)
View item = convertView;
// Esta variable se usa para almacenar un objeto dentro
// de la Vista que dibuja la opción
VistaTag vistaTag;
// Si Android indica que no hay una Vista reutilizable para la opción,
// la definimos, inflamos el diseño que se define en el fichero
// opcion.xml y establecemos su contenido
if(item == null)
{
// Usamos un Inflater para inflar el diseño
// Ahora tenemos una Vista que se asocia al elemento
LayoutInflater inflater = contexto.getLayoutInflater();
// Definimos en la vista de vuelta el tipo de diseño
item = inflater.inflate(R.layout.opcion, null);
/*item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});*/
// Definimos el objeto que vamos a almacenar en el nuevo elemento
vistaTag = new VistaTag();
// Obtenemos los punteros a las etiquetas recién infladas y al icono
vistaTag.titulo = (TextView)item.findViewById(R.id.LblTitulo);
vistaTag.ch = (CheckBox)item.findViewById(R.id.chkItem);
vistaTag.icono = (ImageView) item.findViewById(R.id.icono);
// Guardamos el objeto en el elemento
item.setTag(vistaTag);
}
else
{
// Si estamos reutilizando una Vista, recuperamos el objeto interno
vistaTag = (VistaTag)item.getTag();
}
// Cargamos los datos de las opciones de la matriz de datos
vistaTag.titulo.setText(datos[position].getTitulo());
vistaTag.ch.setChecked(datos[position].getCh());
vistaTag.icono.setImageResource(datos[position].getIcono());
// Devolvemos la Vista (nueva o reutilizada) que dibuja la opción
return(item);
}
} // end class AdaptadorOpciones
//Clase que se usa para almacenar las 2 etiquetas de tipo TextView y un icono de tipo ImageView de una opción
class VistaTag {
TextView titulo;
CheckBox ch;
ImageView icono;
}
MainActivity.java :
Código:
public class MainActivity extends ListActivity {
// Usamos esta matriz para guardar los datos de las 32 opciones del listado
private Opcion[] datos = new Opcion[7];
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Definimos 9 Opciones del listado en la matriz
datos[0] = new Opcion("Atletismo", R.drawable.atletismo, false);
datos[1] = new Opcion("Baloncesto", R.drawable.baloncesto, false);
datos[2] = new Opcion("Fútbol", R.drawable.futbol, false);
datos[3] = new Opcion("Golf", R.drawable.golf, false);
datos[4] = new Opcion("Motociclismo", R.drawable.motociclismo, true);
datos[5] = new Opcion("Natación", R.drawable.natacion, false);
datos[6] = new Opcion("Ping Pong", R.drawable.pingpong, false);
// Creamos el Adaptador que se usa para mostrar las opciones del listado
ArrayAdapter<Opcion> adaptador = new AdaptadorOpciones(this, datos);
// Asignamos el adaptador al ListActivity para que sepa cómo dibujar el listado de opciones
setListAdapter(adaptador);
//Definimos el Click del Botón.
final Button btnboton1 = (Button)findViewById(R.id.button1);
btnboton1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
for (int i=0; i<=6; i++){
if (datos[i].getCh()){
Toast.makeText(getBaseContext(), "Has hecho clic en la '"+ datos[i].getTitulo()+"'", Toast.LENGTH_SHORT).show();
}
}
}
});
} // end onCreate
// Definimos el evento onClick de una opción del listado
public void onListItemClick(ListView parent, View view, int position, long id)
{
if (parent.isItemChecked(position))
datos[position].setCh(true);
else
datos[position].setCh(false);
// Usamos el parámetro "position" para saber la posición de la opción sobre la que el usuario ha hecho clic
//Toast.makeText(getBaseContext(), "Has hecho clic en la '"+ datos[position].getTitulo()+"'", Toast.LENGTH_SHORT).show();
/* CheckBox cb = (CheckBox) view.findViewById(R.id.chkItem);
if(cb.isChecked())
cb.setChecked(false);
else
cb.setChecked(true);*/
}
}
|