Android ListView avec la case à cocher et tout cliquable [dupliquer]

possibilité de dupliquer:

Android: lier des données d'une base de données à une case à cocher dans une 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 si vous en avez, vous ne pourrez pas cliquer sur les Listems. 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. Est-ce que quelqu'un a du code/exemple comment cela est possible?

53
demandé sur Community 2011-03-24 12:54:01
la source

5 ответов

définit le CheckBox comme focusable="false" dans votre disposition XML. Sinon, il volera événements de clic de la vue de liste.

bien sûr, si vous faites cela, vous devez manipuler manuellement le marquage CheckBox comme coché/non coché si l'élément de liste est cliqué au lieu du CheckBox , mais vous voulez probablement cela de toute façon.

101
répondu PacificSky 2013-01-04 18:31:45
la source

définit l'adaptateur listview à "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);    
19
répondu Erik Bergstedt 2012-04-10 11:03:42
la source
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());


                }
        });
9
répondu max4ever 2012-07-31 18:05:16
la source

ce code fonctionne sur mon proyect et je peux sélectionner l'élément listview et la case à cocher

<?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>
7
répondu Borja 2012-11-11 19:47:31
la source

ci-dessous le code vous aidera:

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;



        }
}

Espérons que cette aide.

5
répondu Udaykiran 2013-02-06 00:17:43
la source

Autres questions sur android listview focus checkbox