2010-06-24 47 views
5

Tengo una lista simple para completar desde la base de datos junto con una casilla de verificación. Necesito un identificador para todas las casillas de verificación seleccionadas. Cuando se presiona el botón CLEAR en ese punto, necesito los identificadores de fila de todas las casillas de verificación seleccionadas para eliminarlos. Para ello: Mi archivo list.xml se ve así:Lista de Android y casilla de verificación

< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" > 

<ListView 
      android:id="@id/android:list" 
     android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      /> 

<Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/clearselected" 
     android:text="CLEAR" 
     android:clickable ="false"/> 

</LinearLayout> 

y mi data_entry.xml se parece a esto:

<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"> 
      <CheckBox 
      android:id="@+id/CheckBox" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_x="50px" 
      android:layout_y="22px"></CheckBox> 
<TextView android:text="@+id/EntryText" 
      android:id="@+id/EntryText" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:textColor="@color/blue"/> 

</LinearLayout> 

Ahora: Tengo archivo list.java donde estoy poblando el lista de la siguiente manera:

private void populateList() { 
    Cursor c = db1.getAllList(); 
     String[] fields = new String[]{db1.get_data()}; 

     SimpleCursorAdapter cursorAdapter = new 

    ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.data_entry, c, 
      fields, new int[] {R.id.EntryText}); 


    setListAdapter(adapter); 
} 

Ahora ¿Por dónde dar el mango a la causa heckbox en otro sitio que me daría una excepción nulo como data_entry contiene las casillas de verificación. Además, ¿necesito un oyente para manejar el estado de la casilla de verificación? Estoy atascado en este momento sin ninguna pista ...

Respuesta

19

En lugar de rodar el suyo propio, ¿por qué no simplemente utilizar un ListView estándar con CHOICE_MODE_MULTIPLE habilitado?

listView.setChoiceMode(CHOICE_MODE_MULTIPLE); 
listView.setAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_multiple_choice, fields)); 

A continuación, puede consultar la lista Ver los artículos marcados.

listView.getCheckedItemPositions(); 
+0

Gracias, eso es lo que no consideré. Bueno, tengo otra pregunta para eso ahora. En mi caso, tengo el cursor como se muestra a continuación: private String [] campos estáticos; Cursor c = db1.getAllList(); setListAdapter (nuevo ArrayAdapter (esto, android.R.layout.simple_list_item_multiple_choice, fields)); final ListView listView = getListView(); \t listView.setItemsCanFocus (falso); listView.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE); ¿Cómo obtengo los valores en fields array del cursor? Al usar el adaptador de cursor simple, ¿estaba pasando el cusror allí? Gracias Prerna – Prerna

+0

Gracias! Realmente me ha ayudado mucho. Tuve el mismo problema. Pero ahora sé cómo hacer esto. –

Cuestiones relacionadas