Warum ist mein onItemSelectedListener nicht in einem Listview genannt?
-
20-09-2019 - |
Frage
Ich bin mit einem Listview, die Einrichtung ist wie folgt:
<ListView android:id="@android:id/list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:longClickable="false"
android:choiceMode="singleChoice">
</ListView>
In meinem Code füge ich ein OnItemSelectedListener an die Listview wie folgt aus:
getListView().setAdapter(adapter);
getListView().setOnItemSelectedListener(this);
meine Tätigkeit Geräte der Hörer wie folgt aus:
@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);
}
Meine Hoffnung war, dass ich diese Debug-Ausgabe in dem Moment sehen, würde ich auf etwas in der Liste klicken. Aber die Debug-Ausgabe wird nie in LogCat gezeigt.
Lösung
Das OnItemSelectedListener
Streams für Listenelement Auswahlen und nicht Liste Artikel Klicks.
Eine Auswahl in diesem Fall bewegt den Fokus auf dieses Element mit dem Gerät des Trackpad zu sehen.
Um das Verhalten wollte man den OnItemClickListener
verwenden müssen .
Andere Tipps
Es ist, weil Sie mit den Fingern auf einem Touch-fähiges Gerät zu testen passieren. In Touch-Modus , gibt es keinen Fokus und keine Auswahl. UIS, dass Bedarf Auswahl eine andere Art von Widget, wie Radio-Buttons verwenden sollte.
Zunächst sollten Sie setzen ChoiceMode
und dann in Listview, es wird das ausgewählte Ereignis nicht akzeptieren, weil setOnItemSelectedListener
in AdapterView
registed und Rückruf in Methode handleDataChanged()
, aber Klasse AbsListView
diese Methode überschreiben und Rückruf nie OnItemSelectedListener
Sie können die seletedItem nach dieser Methode in setOnItemClickListener
bekommen
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());
}
});