2010-12-29 11 views

Respuesta

26

Esto es lo que finalmente funcionó para mí, donde yo estoy usando un adaptador de cursor, no sólo una lista ArrayListAdapter para mis artículos:

final ListView list = getListView(); 
for (int i=0; i< getListAdapter().getCount(); i++) { 
     list.setItemChecked(i, true); 
} 

list.getChildCount no funciona, ya que sólo parece contar lo que ha sido dibujado inmediatamente (no todo lo que está fuera de la pantalla), por lo que childCount podría tener solo 6 u 8 elementos cuando la lista completa sea de 100 o más elementos. Además, como tuve que usar list.setItemChecked para obtener los elementos para 'mantenerse marcada' - al menos en mi caso, donde los elementos de mi lista eran casos de CheckedTextView.

+0

¿Cómo puedo trabajar con botones como este? – Manikandan

+0

gracias .. me he enfrentado troble porque childCount – faruk

21
for(int i=0; i < listView.getChildCount(); i++){ 
    RelativeLayout itemLayout = (RelativeLayout)listView.getChildAt(i); 
    CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.MyListViewCheckBox); 
    cb.setChecked(true); 
} 

Hay que editar el código para manejar tanto la activación y desactivación, pero espero que usted consigue la idea!

Además, esto solo marca cada casilla de verificación, asegúrese de devolver una identificación o un objeto de su lista para enviar/guardar los datos en otro lugar.

+0

ordenado ... muchas gracias Abhinav .. muy apreciado –

+1

Este código crea un comportamiento extraño cuando verifico todos los artículos y luego desactivo un artículo. La solución de Thom Nichols es mejor. – bancer

+0

Tengo botones en mi lista. Cuando haga clic en un botón fuera de listview, necesito cambiar el fondo de todos los botones presentes en la vista de lista. Usé tu código y obtuve el error. Cómo lograr esto – Manikandan

0

sólo tiene que añadir un parámetro más en el adaptador como

Boolean Ex.MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, false); 
listview.setAdapter(adapter); 

el botón Seleccionar todo detector de clics añadir este código

MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, true); 
listview.setAdapter(adapter); 

y el registro Adpater

if(chk) { 
    blue_check.setVisibility(View.VISIBLE); 
} else { 
    blue_check.setVisibility(View.GONE); 
} 
0

creo que deberías ejecutar esta tarea de larga ejecución fuera del hilo de la interfaz de usuario. Cuando se hace clic en el botón OnClickListener:

new Thread(new Runnable() { 
        @Override 
        public void run() { 
         for (int i = 0; i < list.getAdapter().getCount(); i++) { 
          final int position = i; 
          mHandler.post(new Runnable() { 
           @Override 
           public void run() { 
            list.setItemChecked(pos, true); 
           } 
          }); 
         } 
        } 
       }).start();  

y en onCreate():

this.mHandler = new Handler(); 

Cada elemento de vista de la lista debe ser comprobable como CheckableRelativeLayout que implementa la interfaz comprobable.

Cuestiones relacionadas