Android ListView avec la case à cocher et tout cliquable

Duplication possible:
Android: liaison de données depuis une firebase database vers un CheckBox dans un ListView?

Je veux utiliser un ListView avec les éléments ayant la disposition suivante

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

CB est une case à cocher et TV est un Textview.

Maintenant, j’ai lu quelque part que vous ne pouvez pas avoir d’éléments cliquables dans un ListView. Si vous en avez, vous ne pourrez pas cliquer sur les ListItems. Mais si je regarde l’application GoogleMail, c’est possible. Je peux marquer plusieurs messages avec la case à cocher (puis sélectionner une action pour eux) ou je peux cliquer sur le ListItem (ou faire défiler avec le dpad) pour accéder à un autre écran. Quelqu’un at-il un code / exemple comment cela est possible?

Définissez le CheckBox comme focusable="false" dans votre mise en page XML. Sinon, il volera des événements de clic dans la vue liste.

Bien sûr, si vous faites cela, vous devez gérer manuellement le marquage de la case à cocher comme coché / décoché si l’élément de la liste est cliqué à la place de la case à cocher, mais vous le voulez probablement de toute façon.

Définissez l’adaptateur ListView sur “simple_list_item_multiple_choice”

 ArrayAdapter adapter; List values; // put values in this //Put in listview adapter = new ArrayAdapter( this, android.R.layout.simple_list_item_multiple_choice, values); setListAdapter(adapter); 
 holder.checkbox.setTag(row_id); 

et

 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()); } }); 

ce code fonctionne sur mon projet et je peux sélectionner l’élément de vue de liste et la case à cocher

        

Le code ci-dessous vous aidera:

 public class DeckListAdapter extends BaseAdapter{ private LayoutInflater mInflater; ArrayList teams=new ArrayList(); ArrayList teamcolor=new ArrayList(); 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().toSsortingng()); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.text.setText(teams.get(position)); if(position 

J'espère que cela t'aides.