J'ai un ListActivity simple qui utilise un ListAdapter personnalisé pour générer les vues dans la liste. Normalement, le ListAdapter remplirait simplement les vues avec TextViews, mais maintenant je veux y mettre également un bouton.
Cependant, selon ma compréhension et mon expérience, mettre une vue focalisable dans l'élément de liste empêche le déclenchement de onListItemClick () dans ListActivity lorsque l'utilisateur clique sur l'élément de liste. Le bouton fonctionne toujours normalement dans l'élément de liste, mais quand quelque chose en plus du bouton est enfoncé, je veux que onListItemClick soit déclenché.
Comment puis-je faire fonctionner cela?
android
android-widget
android-listview
CodeFusionMobile
la source
la source
Réponses:
comme je l'ai écrit dans le commentaire précédent, la solution consiste à définirFocusable (false) sur ImageButton.
Il existe une solution encore plus élégante pour essayer d'ajouter
android:descendantFocusability="blocksDescendants"
la mise en page racine de l'élément de liste. Cela rendra possible les clics surListItem et séparément vous pourrez gérer les clics sur Button ou ImageButtonJ'espère que ça aide ;)
À votre santé
la source
android:descendantFocusability="blocksDescendants"
était parfait.J'espère que je peux aider ici. Je suppose que vous avez une disposition personnalisée pour les éléments listView, et cette disposition se compose d'un bouton et de quelques autres vues - comme TextView, ImageView ou autre. Maintenant, vous voulez avoir un événement différent déclenché sur un clic sur un bouton et un événement différent déclenché sur tout le reste cliqué.
Vous pouvez y parvenir sans utiliser onListItemClick () de votre ListActivity.
Voici ce que vous devez faire:
Vous utilisez une disposition personnalisée, donc vous remplacez probablement la méthode getView () de votre adaptateur personnalisé. L'astuce consiste à définir les différents écouteurs pour votre bouton et différents pour l'ensemble de la vue (votre ligne). Jetez un œil à l'exemple:
Votre classe OnItemClickListener pourrait être déclarée comme ici:
Bien sûr, vous ajouterez probablement d'autres paramètres au constructeur OnItemClickListener.
Et une chose importante - l'implémentation de getView présentée ci-dessus est assez moche, normalement vous devriez utiliser le modèle ViewHolder pour éviter les appels findViewById ... mais vous le savez probablement déjà.
Mon fichier custom_row.xml est RelativeLayout avec Button de l'id "button", TextView de l'id "text" et ImageView de l'id "image" - juste pour clarifier les choses.
Cordialement!
la source
Quand un ListView personnalisé contient des éléments focalisables, onListItemClick ne fonctionnera pas (je pense que c'est le comportement attendu). Supprimez simplement le focus de la vue personnalisée, cela fera l'affaire:
Par exemple:
la source
J'ai le même problème: OnListItemClick n'est pas déclenché! [RÉSOLU]
Cela se produit sur la classe qui étend ListActivity,
avec une disposition pour ListActivity qui contient TextBox et ListView imbriqués dans LinearLayout
et une autre disposition pour les lignes (un CheckBox et TextBox imbriqués dans LineraLayout).
C'est le code:
res / layout / configpage.xml (principal pour ListActivity)
src /.../.../ ConfigPage.java
Cela commence à fonctionner lorsque j'ai ajouté sur row.xml
android:focusable="false"
android:focusableInTouchMode="false"
J'utilise Eclipse 3.5.2
Android SDK 10.0.1
min SDK version: 3
J'espère que cela vous sera utile
... et désolé pour mon anglais :(
la source
ajoutez simplement
android:focusable="false"
comme l'un des attributs de votre boutonla source
J'ai eu le même problème avec ToggleButton. Après une demi-journée à me cogner la tête contre un mur, je l'ai finalement résolu. C'est aussi simple que de rendre la vue focalisable non focalisable, en utilisant «android: focusable». Vous devez également éviter de jouer avec la focalisation et la cliquabilité (je viens de créer des mots) de la ligne de liste, laissez-les simplement avec la valeur par défaut.
Bien sûr, maintenant que vos vues focalisables dans la ligne de liste ne sont pas focalisables, les utilisateurs utilisant le clavier peuvent avoir des problèmes, eh bien, les focaliser. Ce n'est probablement pas un problème, mais juste au cas où vous voudriez écrire des applications 100% impeccables, vous pouvez utiliser l'événement onItemSelected pour rendre les éléments de la ligne sélectionnée focalisables et les éléments de la ligne précédemment sélectionnée non focalisables.
la source
la source
J'ai utilisé getListAdapter (). GetItem (position) instanciant un objet qui contient mes valeurs dans l'élément
puis utilisé la méthode getter de myPojo, il appellera ses valeurs appropriées dans l'élément.
la source