Activity
code de la classe:
conversationList = (ListView)findViewById(android.R.id.list);
ConversationArrayAdapter conversationArrayAdapter=new ConversationArrayAdapter(this, R.layout.conversation_list_item_format_left, conversationDetails);
conversationList.setAdapter(conversationArrayAdapter);
conversationList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Log.d("test","clicked");
}
});
La getView
fonction dans la Adapter
classe:
if (v == null) {
LayoutInflater vi = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(leftSideMessageNumber.equals(m.getTo())) {
v = vi.inflate(R.layout.conversation_list_item_format_left, null);
} else {
v = vi.inflate(R.layout.conversation_list_item_format_right, null);
}
}
Y a-t-il un problème avec l'utilisation de deux xml pendant le gonflage?
Réponses:
Je viens de trouver une solution d'ici, mais en cliquant profondément.
Si un élément de ligne de la liste contient une vue focalisable ou cliquable,
OnItemClickListener
cela ne fonctionnera pas.L'élément de ligne doit avoir un paramètre comme
android:descendantFocusability = "blocksDescendants"
.Ici, vous pouvez voir un exemple de l'apparence de votre élément de liste. Votre élément de liste xml devrait être ...
row_item.xml
(your_xml_file.xml
)la source
listView.setDescendantFocusability(int focus);
oùfocus
est l'un desViewGroup.FOCUS_BEFORE_DESCENDANTS
,ViewGroup.FOCUS_AFTER_DESCENDANTS
ouViewGroup.FOCUS_BLOCK_DESCENDANTS
Le problème est que vos mises en page contiennent des éléments pouvant être mis au point ou cliquables. Si une vue contient un élément focalisable ou cliquable, OnItemCLickListener ne sera pas appelé.
Cliquez ici pour plus d'informations.
Veuillez publier l'un de vos fichiers XML de mise en page si ce n'est pas le cas.
la source
EditText
s enTextView
s, et le aCheckBox
été autorisé à rester (et à basculer) avec l'android:descendantFocusability="blocksDescendants"
ajout à monLinearLayout
.android:focusableInTouchMode="true"
pour le rang, une fois retiré, il a enfin commencé à fonctionner! :-)Pour mes listes, mes lignes ont d'autres choses sur lesquelles on peut cliquer, comme des boutons, donc faire une couverture
blocksDescendants
ne fonctionne pas. Au lieu de cela, j'ai ajouté une ligne dans le xml du bouton:Cela empêche les boutons de bloquer les clics sur les lignes, mais permet toujours aux boutons de prendre les clics.
la source
vous devez faire 2 étapes dans votre listview_item.xml
android:descendantFocusability="blocksDescendants"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
Voici un exemple: listview_item.xml
la source
clickable="true
sur la vue de l'élément fera que leonItemClick
ne sera pas appelé.clickable="false"
LinearLayout
utilisez le code ci-dessous à l'intérieur de la balise de bouton dans la disposition des lignes personnalisée de listview
la source
android:descendantFocusability="blocksDescendants"
bloquer pour les cliquerJ'ai eu le même problème et je viens de voir que j'avais accidentellement réglé:
sur ma classe CustomListViewAdapter.
En changeant ceci en:
J'ai réussi à résoudre le problème. Au cas où quelqu'un aurait fait la même erreur ...
la source
@Override public void onApplicationStart { ExplodeThisDevice(); }
Utiliser Android: descendantFocusability
Ajouter ci-dessus dans la disposition racine
la source
Je l'ai résolu avec l'aide de cette réponse
1.Ajoutez les éléments suivants dans Disposition linéaire de list_items.xml
android:descendantFocusability="blocksDescendants"
2. Vues d'enfant de LinearLayout dans list_items.xml
la source
si vous avez des vues de texte, des boutons ou stg cliquables ou sélectionnables dans votre affichage de ligne uniquement
n'est pas assez. Vous devez définir
à vos vues de texte et
à vos boutons et autres éléments pouvant être mis au point.
la source
Même si j'avais le même problème, j'ai une case à cocher, j'ai fait ce qui suit pour masquer le travail itemClickListener,
Ajout des propriétés suivantes à la case à cocher,
et ItemClickListner a commencé à fonctionner.
Pour un exemple détaillé, vous pouvez passer par le lien,
http://knowledge-cess.com/android-itemclicklistner-with-checkbox-or-radiobutton/
J'espère que ça aide Cheers !!
la source
J'ai eu le même problème et j'ai essayé toutes les solutions mentionnées en vain. grâce à des tests, j'ai trouvé que rendre le texte sélectionnable empêchait l'auditeur d'être appelé. Donc, en le mettant sur false ou en le supprimant, mon auditeur a été rappelé.
j'espère que cela aide quelqu'un qui était coincé comme moi.
la source
Ajoutez ceci dans la disposition principale
Écrivez ce code dans chaque bouton, Textview, ImageView etc. qui ont onClick
J'espère que cela fonctionnera.
la source
Deux solutions impressionnantes étaient les suivantes, si votre extension ListFragment à partir d'un fragment, sait que
mListView.setOnItemClickListener
ne sera pas appelé avant la création de votre activité, cela garantit qu'il est défini lorsque l'activité a été crééeEn regardant le code source de ListFragment, je suis tombé sur ce
Un
onItemClickListener
objet est attaché et il appelle enonListItemClick()
tant que telle l'autre solution similaire, qui fonctionne exactement de la même manière, c'est de remplaceronListItemClick()
la source
dans mon cas, aucune des propriétés de mise en page xml ne m'a été utile.
J'ajoute juste une seule ligne de code comme ceci: convertView.setClickable (false);
Donc, fondamentalement, cela fait la même chose que la configuration des propriétés dans la mise en page XML, mais c'est la seule chose qui fonctionne dans mon cas.
Ce n'est pas un timing parfait, mais peut-être que cela aidera quelqu'un
la source
J'ai essayé tout ce qui précède et RIEN n'a fonctionné.
J'ai résolu le problème comme suit:
Je définis d'abord un bouton personnalisé appelé
ListButton
Le XML ressemble à:
Ensuite, je définis ma propre
ButtonClicked
interface d'écoute:Ensuite, j'utilise mon propre écouteur comme si c'était la normale
OnClickListener
:la source
J'ai eu le même problème, j'utilisais un style pour mes textes dans la disposition des lignes qui avait l'attribut "focusable". Cela a fonctionné après l'avoir retiré.
la source
Dans mon cas, j'ai dû supprimer la ligne suivante du
Layout
la source
Android: l'attribut autoText rend également TextView auto focusable.
la source
Si vous souhaitez utiliser à la fois le simple clic et le long clic sur les éléments de la vue de liste, la meilleure façon de les implémenter serait d'utiliser le menu contextuel pour un long clic. Évitez d'utiliser setItemLongClickListener, surtout si vous disposez de plusieurs dispositions de ligne pour votre affichage de liste.
la source
Face au même problème, essayé pendant des heures. Si vous avez essayé toutes les solutions ci-dessus, essayez de modifier layout_width de Listview et list item pour match_parent de wrap_content.
la source
Tout ce qui précède a échoué pour moi. Cependant, j'ai pu résoudre le problème (après plusieurs heures à me cogner la tête - Google, si vous écoutez, veuillez envisager de corriger ce que j'ai rencontré ci-dessous sous la forme d'erreurs de compilation, si possible)
Vous devez vraiment faire attention aux attributs Android que vous ajoutez à votre disposition xml ici (dans cette question d'origine, cela s'appelle list_items.xml). Pour moi, ce qui causait le problème, c'est que j'étais passé d'une vue EditText à une TextView et que j'avais laissé les attributs croupir du changement (dans mon cas, inputType). Le compilateur ne l'a pas détecté et la cliquabilité a juste échoué lorsque je suis allé exécuter l'application. Vérifiez tous les attributs que vous avez dans vos nœuds XML de mise en page.
la source
Ensuite, dans votre activité, utilisez adapter.setOnItemClickListener () avant de le joindre à la vue de liste.
Copié de github, ça a marché pour moi
la source
La chose qui a fonctionné pour moi a été d'ajouter le code ci-dessous à chaque sous-vue à l'intérieur de la disposition de mon fichier row.xml:
Donc dans mon cas:
Et voici mon appel setOnItemClickListener dans ma sous-classe Fragment:
J'ai obtenu la réponse d' ici !
la source
J'ai résolu le problème en supprimant les vues cliquables de la liste.
la source