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