J'utilise un ListView configuré comme ceci:
<ListView Android:id="@Android:id/list" Android:layout_width="fill_parent"
Android:layout_height="fill_parent" Android:longClickable="false"
Android:choiceMode="singleChoice">
</ListView>
Dans mon code, j'ajoute un OnItemSelectedListener au ListView comme ceci:
getListView().setAdapter(adapter);
getListView().setOnItemSelectedListener(this);
mon activité implémente l'auditeur comme ça:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d("Tag", "ListItemSelected: Parent: " + parent.toString() + " View: "
+ view.toString() + " Position: " + " Id: " + id);
}
J'espérais que je verrais cette sortie de débogage au moment où je clique sur quelque chose dans la liste. Mais la sortie de débogage n'est jamais affichée dans LogCat.
OnItemSelectedListener
écoute les sélections d'élément de liste et non les clics d'élément de liste.
Dans ce cas, une sélection pourrait être considérée comme déplaçant le focus sur cet élément avec le trackpad de l'appareil.
Pour obtenir le comportement souhaité, il faut utiliser le OnItemClickListener
.
C'est parce que vous testez avec vos doigts sur un appareil tactile. En mode tactile , il n'y a ni mise au point ni sélection. Les interfaces utilisateur qui doivent être sélectionnées doivent utiliser un type de widget différent, comme des boutons radio.
Dans un premier temps, vous devez définir ChoiceMode
, puis, dans ListView, il n'acceptera pas l'événement sélectionné car setOnItemSelectedListener
enregistré dans AdapterView
et rappel dans la méthode handleDataChanged()
, mais la classe AbsListView
remplace cette méthode et ne rappelle jamais OnItemSelectedListener
vous pouvez obtenir le seletedItem par cette méthode dans setOnItemClickListener
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("TAG", "onItemClick: " + position);
SparseBooleanArray positions = mListView.getCheckedItemPositions();
Log.e("TAG", "onItemSelected: " + positions.toString());
}
});