Pourquoi mon onItemSelectedListener pas appelé dans un ListView?
-
20-09-2019 - |
Question
J'utilise un ListView qui est 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'ajouter un OnItemSelectedListener au ListView comme ceci:
getListView().setAdapter(adapter);
getListView().setOnItemSelectedListener(this);
Mon activité met en œuvre 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);
}
Mon espoir était que je verrais cette sortie de débogage le moment je clique sur quelque chose dans la liste. Mais la sortie de débogage est jamais montré dans LogCat.
La solution
Le OnItemSelectedListener
écoute les sélections d'éléments de liste et pas la liste clique article.
Une sélection dans ce cas, pourrait être considérée comme déplacer l'accent sur ce point avec le pavé tactile de l'appareil.
Pour obtenir une de comportement voulu doit utiliser le OnItemClickListener
.
Autres conseils
Dans un premier temps, vous devez définir ChoiceMode
, puis, ListView, il n'y aura pas d'accepter l'événement sélectionné parce setOnItemSelectedListener
registed dans AdapterView
, et le rappel de la méthode handleDataChanged()
, mais la classe AbsListView
remplacer cette méthode et ne jamais callback 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());
}
});