60 votes

ListView et boutons à l'intérieur de ListView

Je veux afficher un bouton à l'intérieur de la liste. L'objectif devrait être de cliquer sur la liste de la ligne ou sur le bouton.

Cliquez sur la ligne il montre plus d'informations. Cliquez sur le bouton, il montre au fond plus de boutons.

Le même que l'application GMAIL.

Sur la droite il y a une case et en cliquant sur la case à cocher en bas, la barre de boutons s'affiche.

Mon problème est que après l'insertion d'un bouton dans la liste, le bouton n'est pas cliquable. Si j'ajoute à la LinearLayout de la touche llButton.setClickable il fonctionne. Mais, seul le bouton. La liste elle-même ne pas réagir aux clics!

J'ai essayé cet exemple.

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

122voto

teh1 Points 1790

Juste pour faire de ce clair – et personne ne semble avoir dit quelque chose d'aussi simple que tandis que l'on n'est pas autorisé à avoir un focusable bouton de la liaison avec l'affichage de la liste, il y a une solution beaucoup plus simple pour cela.

L'on a accepté la réponse est donnée, vous devez toujours le faire que lorsque la configuration de l'écouteur de clics pour les éléments de liste, de sorte que n'est stupide que l'OP ne le savais pas.

Si vous utilisez une mise en page XML comme votre élément de la liste, il suffit de régler le bouton pour avoir l'attribut suivant et il sera la cause de l'élément de la liste à être cliquable:

android:focusable="false"

20voto

Faruk Toptas Points 455

Ajoutez la ligne ci-dessous à votre élément de liste XML.

 android:descendantFocusability="blocksDescendants"
 

Ensuite, 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>
 

9voto

Venky Points 8716

Si vous utilisez un adaptateur personnalisé, le clic du bouton dans un ListView ne fonctionnera pas. Vous devez donc essayer d'utiliser le code suivant pour vérifier les OnItemClickListener .

 listId.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
      // Your code for item clicks
   }
});
 

7voto

beta Points 51

Pour que l'événement soit déclenché lorsque l'utilisateur clique sur le bouton ou l'élément de liste, vous pouvez procéder comme suit:

Vous ne gérez que 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 qu'il ne soit pas cliquable / ne puisse pas être mis au point (ou le faire 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);               
    }
}
 

2voto

user3315298 Points 21

try: android: descendantFocusability = "blocksDescendants" Cela fonctionne

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X