ListView et boutons à l’intérieur de ListView

Je veux afficher un Button à l’intérieur de ListView . Le but devrait être de cliquer sur la ligne ListView ou sur le bouton.

Cliquez sur la ligne qui montre plus d’informations. Cliquez sur le bouton qu’il montre en bas d’autres boutons.

Le même que l’application GMAIL.

À 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 avoir inséré le bouton dans ListView , le bouton n’est pas cliquable. Si j’ajoute le au LinearLayout partir du bouton llButton.setClickable() cela fonctionne. Mais seulement le bouton. Le ListView ne réagit plus sur les clics!

J’ai essayé cet exemple .

Le même problème que ci-dessus …

Si vous utilisez un adaptateur personnalisé, le clic de bouton dans un ListView ne fonctionnera pas, vous devez donc essayer d’utiliser le code suivant pour rechercher OnItemClickListener .

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

Pour que ce soit clair – et personne ne semble avoir dit quelque chose d’aussi simple – alors qu’il n’est pas permis à un bouton de mise au sharepoint fonctionner conjointement avec la vue liste, il existe une solution beaucoup plus simple.

La réponse acceptée est une donnée – vous devriez toujours le faire lorsque vous définissez le programme d’écoute des éléments de liste, ce qui est idiot que OP ne le sache pas.

Si vous utilisez une mise en page XML en tant qu’élément de votre liste, définissez simplement le bouton avec l’atsortingbut suivant et cela entraînera un clic sur l’élément de liste:

android:focusable="false"

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

 android:descendantFocusability="blocksDescendants" 

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

   // Your layout objects here  

Pour que l’événement soit déclenché lorsque l’utilisateur clique sur le bouton ou sur l’élément de liste, vous pouvez effectuer les opérations suivantes:

Vous manipulez uniquement 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 puisse pas être cliqué / focalisé (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); } } 

Dans mon cas, je devais append cet atsortingbut dans la listeView:

  

Et dans l’adaptateur, ajoutez simplement un écouteur de clic dans la vue des boutons.

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