ListView et les boutons à L'intérieur de ListView

je veux afficher un Button dans le ListView . Le but doit être de cliquer sur la ligne ListView ou sur le bouton.

cliquez sur la ligne qui affiche plus d'informations. Cliquez sur le bouton il montre en bas plus de boutons.

identique à L'application GMAIL.

sur la droite il y a une case à cocher et après avoir cliqué sur la case en bas, la barre de boutons apparaît.

mon problème est après l'insertion d'un bouton dans le ListView , le bouton n'est pas cliquable. Si j'ajoute le au LinearLayout à partir du bouton llButton.setClickable() il fonctionne. Mais, seul le bouton. Le ListView lui-même ne réagit plus sur les clics!

j'ai essayé cet exemple .

La même question que ci-dessus...

56
demandé sur Community 2010-06-15 18:02:13

5 réponses

si vous utilisez un adaptateur personnalisé, le bouton Cliquer à L'intérieur D'un ListView ne fonctionnera pas .vous devez donc essayer d'utiliser le code suivant pour vérifier OnItemClickListener .

listId.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
      // Your code for item clicks
   }
});
8
répondu Venky 2014-06-03 14:54:00

juste pour clarifier cela – et personne ne semble avoir dit quelque chose d'aussi simple – alors qu'on n'est pas autorisé à avoir un bouton focalisable travailler en conjonction avec la vue Liste, il y a une solution beaucoup plus simple pour cela.

la réponse acceptée est un donné - vous devriez toujours faire cela lors de la mise en place de l'écouteur de clic pour les éléments de liste, de sorte que c'est stupide que OP ne savait pas cela.

si vous utilisez une mise en page XML comme élément de votre liste, définissez simplement bouton pour avoir l'attribut suivant et il causera l'élément de liste pour être cliquable aussi bien:

android:focusable="false"

118
répondu teh1 2012-05-10 07:19:54

ajouter la ligne ci-dessous à votre article de liste XML.

android:descendantFocusability="blocksDescendants"

alors votre élément de liste sera comme ceci:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:descendantFocusability="blocksDescendants"
android:layout_height="wrap_content" >

    // Your layout objects here

</RelativeLayout>
18
répondu Faruk Toptas 2014-03-22 20:47:50

Pour que l'événement sera déclenché lorsque le bouton ou l'élément de liste est cliqué, vous pouvez faire ce qui suit:

Vous ne traiter que les onItemClick:

mListView.setOnItemClickListener(new ListView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a, View v, int i, long l) {
        // handle click here
    }
);

dans l'adaptateur vous modifiez le bouton pour ne pas être cliquable / focalisable (ou faites ceci dans le fichier xml à la place):

public class MyAdapter extends BaseAdapter {
    ...
    public View getView(int position, View convertView, ViewGroup parent) {
        .....  
        Button btn = view.findViewById(R.id.button);
        btn.setFocusable(false);
        btn.setClickable(false);               
    }
}
7
répondu beta 2012-09-26 07:51:53

Dans mon cas, j'ai dû ajouter cet attribut dans la liste :

<ListView
...
android:clickable="true"
...
</ListView>

Et dans l'adaptateur simplement ajouter écouteur de clics sur le bouton afficher.

wrapper.getButtonHi().setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            DebugUtils.logDebug("Clickeado :: "+ mContact.getUserId());
        }
});

il est important de définir les variables finales:

public View getRowView(final int position, View convertView, ViewGroup parent) {
    final BrowseContactItemWrapper wrapper;
    final UserModel mContact = lstContact.get(position);
    .....
}
0
répondu Kokusho 2014-09-30 18:28:30