Perché il mio onItemSelectedListener non si chiama in un ListView?
-
20-09-2019 - |
Domanda
Io sto usando un ListView che è configurato in questo modo:
<ListView android:id="@android:id/list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:longClickable="false"
android:choiceMode="singleChoice">
</ListView>
Nel mio codice aggiungo un OnItemSelectedListener alla ListView in questo modo:
getListView().setAdapter(adapter);
getListView().setOnItemSelectedListener(this);
La mia attività implementa l'ascoltatore così:
@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);
}
La mia speranza era, che avrei visto questa uscita di debug il momento clicco su qualcosa nella lista. Ma l'output di debug non viene mai mostrato in LogCat.
Soluzione
Il OnItemSelectedListener
ascolta per la selezione di voci di elenco e non la lista click voce.
Una lista in questo caso potrebbe essere visto come spostare il fuoco su questo articolo con trackpad del dispositivo.
Per ottenere il voluto uno comportamento deve utilizzare il OnItemClickListener
.
Altri suggerimenti
E 'perché vi capita di essere il test con le dita su un dispositivo touch-enabled. In modalità touch , non v'è alcuna messa a fuoco e nessuna selezione. Interfacce utente che la selezione necessità deve utilizzare un diverso tipo di widget di, come ad esempio pulsanti di opzione.
In un primo momento, è necessario impostare ChoiceMode
, e poi, in ListView, ci sarà non accettano l'evento selezionato perché setOnItemSelectedListener
registed in AdapterView
, e richiamata nel metodo handleDataChanged()
, ma di classe AbsListView
ignorare questo metodo e mai richiamata OnItemSelectedListener
è possibile ottenere il seletedItem con questo metodo in 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());
}
});