entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Como saber que checkbox están seleccionados en Android

Haber tengo un lista de checkbox en la cuál tienes un máximo de elementos para seleccionar, en este caso 3. Hasta ahí todo bien. Ahora al final quiero que cuando todos los checkbox estén seleccionados, me los muestre en una cadena simple.

Por ejemplo: String cadena = "perro, gato, pájaro";

El problema es que al ponerlos en la cadena bien, pero si elimina algún elemento y selecciona otro sigue almacenando en la cadena y no sé como eliminar ese específico.

Muestro el código:

OnCheckedChangeListener checker = new OnCheckedChangeListener(){ 
        @Override
        public void onCheckedChanged(CompoundButton cb, boolean b) {
            if(count == maxLimit && b){
                   cb.setChecked(false);
                   Toast.makeText(getApplicationContext(), 
                "No puedes seleccionar más elementos", Toast.LENGTH_SHORT).show();
               }else if(b){
                    Cadena = Cadena + cb.getText().toString()+", ";
                    count++;
                }else if(!b){
                    //Aquí es donde tendría que quitar el elemento
                    count--;
            }
        }
    };

for(int i = 0; i < lengthBox; i++) {
        int id = getResources().getIdentifier("checkBox"+i, "id", getPackageName());
        checkbox[i] = (CheckBox) findViewById(id);
        checkbox[i].setOnCheckedChangeListener(checker);
    }

¿Cómo puedo arreglar eso? Espero haberme explicado bien. Muchas gracias

1 Respuesta

2votos

danielreales7 Puntos5380

Estuve complicándome más de lo que era.
Lo solucioné de la siguiente forma:

1º cree un ArrayList:

ArrayList<String> Cadena = new ArrayList<String>();

2º añadirlo en el for de la siguiente manera:

OnCheckedChangeListener checker = new OnCheckedChangeListener(){ 
        @Override
        public void onCheckedChanged(CompoundButton cb, boolean b) {
            if(count == maxLimit && b){
                   cb.setChecked(false);
                   Toast.makeText(getApplicationContext(), 
                "No puedes seleccionar más elementos", Toast.LENGTH_SHORT).show();
               }else if(b){
                    Cadena.add(cb.getText().toString());
                    count++;
                }else if(!b){
                    String sameWord = cb.getText().toString();
                    for(int cnt=0;cnt<Cadena.size();cnt++){
                        if(sameWord.equals(Cadena.get(cnt))){
                            Cadena.remove(cnt);
                        }
                    }
                    count--;
            }
        }
    };

Al eliminar elemento lo que hago es recorrer el ArrayList y si la cadena que está eliminando ya está dentro, también la elimino del ArrayList

0voto

Peter comentado

Gracias por compartir la solución :D

0voto

danielreales7 comentado

No hay de que! :)

2votos

Lukard comentado

Daniel siempre que tengas problemas de este tipo, te recomiendo utilizar Guava. Esta librería tiene dos clases (Splitter y Joiner) que te facilitaran mucho la vida cuando intentes tratar con arrays - strings.

Te dejo un link para que puedas ver cómo funciona:
http://www.baeldung.com/guava-joiner-and-splitter-tutorial

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta