Pregunta

Tengo una lista de lista que contiene la casilla de verificación y la vista de texto y he agregado un ViewBinder a mi adaptador y en este ViewBinder, he agregado un oyente de estado onChecked a mis casillas de verificación y en el oyente de estado onChecked, escribí este código:

OnCheckedChangeListener myCheckChangList = new OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                String id=buttonView.getTag()+"";
                int buttonid=Integer.valueOf(id);               
                if(buttonView.isChecked()==true){   
                    Log.d("checked","checked");
                myDbHelper.MarkAsFavorite(buttonid);

                }

                else if(buttonView.isChecked()==false){
                    Log.d("unchecked","unchecked");
                    myDbHelper.UnMarkAsFavorite(buttonid);
                }

                 cu=myDbHelper.GetCursor();
                 adapter.swapCursor(cu);

            }
        }; 

Pero con este código cuando se verificó mi casilla de verificación, se guardó en la base de datos, cuando se desplaza a través de la vista ListView, no se controla a todos, accede al código de la casilla de verificación sin marcar y desmarque.

Así que lo arreglé con agregar un oyente de ONCLICK a la casilla de verificación en lugar del oyente de estado de OncHange:

public void onclick(View view) {
         String id=view.getTag()+"";
            int buttonid=Integer.valueOf(id);               
            if(((CompoundButton) view).isChecked()==true){  
                Log.d("checked","checked");
            myDbHelper.MarkAsFavorite(buttonid);

            }

            else if(((CompoundButton) view).isChecked()==false){
                Log.d("unchecked","unchecked");
                myDbHelper.UnMarkAsFavorite(buttonid);
            }

             cu=myDbHelper.GetCursor();
             adapter.swapCursor(cu);
     }

y no tengo más problema.Pero quería saber por qué este cambio de que el oyente estatal actuó de esa manera?

¿Fue útil?

Solución

Tiene este checkbox dentro de ListView, ya que ListView Reutiliza las visitas para la eficiencia El mismo objeto de cuadro de verificación puede proporcionarse a múltiples elementos de listView y, cuando se verifica como la misma casilla de verificación no está marcada para otra.

Otros consejos

Este cambio de que el oyente de estado actuó de manera que solo cuando desplaza una lista de ListView porque vuelve a GetView Llamar, lo que cambia la casilla de verificación marcada Estado, por lo tanto, la llamada de Check CarthangeDlistner, que cambia el valor en la base de datos.Y cuando usó OPSLICK su problema resuelto, ya que en usted cambia la vista ListView Ver OnClick evento, no los incendios, que no está cambiando el valor de su base de datos.

Puede resolver este problema utilizando Viewhermeder en ListView.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top