2011-03-24 17 views
53

Duplicar posible:
Android: Binding data from a database to a CheckBox in a ListView?Android ListView con casillas de verificación y todo se puede hacer clic

Quiero usar un ListView con los artículos que tiene la siguiente disposición

------------------------- 
[CB] TV   TV 
------------------------- 

CB es una casilla de verificación y TV es una vista de texto.

Ahora he leído en alguna parte que no se pueden hacer clic en elementos en un ListView. Si tiene algunos, entonces no podrá hacer clic en ListItems. Pero si miro la aplicación GoogleMail, esto es posible. Puedo marcar varios mensajes con la casilla de verificación (y luego seleccionar una acción para ellos) o puedo hacer clic en ListItem (o desplazarme con el dpad) para acceder a otra pantalla. ¿Alguien tiene un código/ejemplo de cómo esto es posible?

+0

no tengo el código atm pero es posible debido a movimiento , arrastrar, hacer clic y longClick no es el mismo evento. Y también el hitbox de la casilla de verificación se encuentra en la parte superior de la vista de lista. – Fredrik

+0

Mire el código [aquí] (http://stackoverflow.com/questions/1505751/android-binding-data-from-a-database-to-a-checkbox-in-a-listview) Puede seleccionar varios elementos en lista vista Marque [aquí] (http://appfulcrum.com/?p=281) Con texto e imagen, ejemplo: [aquí] (http://appfulcrum.com/?p=311) –

+3

Esta pregunta no es un duplicado. La otra pregunta es cómo hacer que CursorAdapter vincule las columnas db correctas a vistas particulares. Esta pregunta no se trata de vincular los datos en absoluto, se trata de cómo hacer que se haga clic en una casilla de verificación en un ListView. –

Respuesta

5

A continuación código le ayudará a:

public class DeckListAdapter extends BaseAdapter{ 

     private LayoutInflater mInflater; 
     ArrayList<String> teams=new ArrayList<String>(); 
     ArrayList<Integer> teamcolor=new ArrayList<Integer>(); 


     public DeckListAdapter(Context context) { 
      // Cache the LayoutInflate to avoid asking for a new one each time. 
      mInflater = LayoutInflater.from(context); 

      teams.add("Upload"); 
      teams.add("Download"); 
      teams.add("Device Browser"); 
      teams.add("FTP Browser"); 
      teams.add("Options"); 

      teamcolor.add(Color.WHITE); 
      teamcolor.add(Color.LTGRAY); 
      teamcolor.add(Color.WHITE); 
      teamcolor.add(Color.LTGRAY); 
      teamcolor.add(Color.WHITE); 


     } 



     public int getCount() { 
      return teams.size(); 
     } 


     public Object getItem(int position) { 
      return position; 
     } 


     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      final ViewHolder holder; 


      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.decklist, null); 

       holder = new ViewHolder(); 
       holder.icon = (ImageView) convertView.findViewById(R.id.deckarrow); 
       holder.text = (TextView) convertView.findViewById(R.id.textname); 

      .......here you can use holder.text.setonclicklistner(new View.onclick. 

         for each textview 


       System.out.println(holder.text.getText().toString()); 

       convertView.setTag(holder); 
      } else { 

       holder = (ViewHolder) convertView.getTag(); 
      } 



      holder.text.setText(teams.get(position)); 

      if(position<teamcolor.size()) 
      holder.text.setBackgroundColor(teamcolor.get(position)); 

      holder.icon.setImageResource(R.drawable.arraocha); 







      return convertView; 
     } 

     class ViewHolder { 
      ImageView icon; 
      TextView text; 



     } 
} 

Espero que esto ayude.

19

Ajuste el adaptador de vista de lista para "simple_list_item_multiple_choice"

ArrayAdapter<String> adapter; 

List<String> values; // put values in this 

//Put in listview 
adapter = new ArrayAdapter<UserProfile>(
this, 
android.R.layout.simple_list_item_multiple_choice, 
values); 
setListAdapter(adapter);  
+1

Esos diseños integrados son útiles solo si desea un diseño simple. Está mostrando que quiere hacer una casilla de verificación con 2 vistas de texto. –

101

Establecer la CheckBox como focusable="false" en su diseño XML. De lo contrario, robará los eventos de clic de la vista de lista.

Por supuesto, si usted hace esto, usted necesita para manejar manualmente marcando el CheckBox como equipaje/sin marcar si el elemento de la lista se hace clic en lugar de la CheckBox, pero es probable que quieren de todos modos.

+1

Gracias, esto funcionó para mí;) – Johannes

+29

Establecer focusable = "false" para la casilla de verificación me permite hacer clic en los elementos de la vista de lista, pero no me impide hacer clic en la casilla de verificación. Para esto, también necesito configurar clickable = "false" para la casilla de verificación. – basilisk

+0

cómo permitir el robo de clic en la casilla de verificación al hacer clic en el elemento de la vista de lista android? –

9
holder.checkbox.setTag(row_id); 

y

holder.checkbox.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        CheckBox c = (CheckBox) v; 

        int row_id = (Integer) v.getTag(); 

        checkboxes.put(row_id, c.isChecked()); 


       } 
     }); 
7

este código funciona en mi proyecto y puedo seleccionar el elemento listview y casilla

<?xml version="1.0" encoding="utf-8"?> 
<!-- Single List Item Design --> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:clickable="true" > 

    <TextView 
     android:id="@+id/label" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="4" /> 

    <CheckBox 
     android:id="@+id/check" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:focusable="false" 
     android:text="" > 
    </CheckBox> 

</LinearLayout> 
+0

@Rob Sí, lo siento. – Borja

Cuestiones relacionadas