¿Por qué mi onItemSelectedListener no se llama en un ListView?
-
20-09-2019 - |
Pregunta
Estoy usando un ListView que se configura como esto:
<ListView android:id="@android:id/list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:longClickable="false"
android:choiceMode="singleChoice">
</ListView>
En mi código agrego una OnItemSelectedListener a la ListView como esto:
getListView().setAdapter(adapter);
getListView().setOnItemSelectedListener(this);
Mi actividad implementa el oyente como que:
@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);
}
Mi esperanza era que me gustaría ver esta salida de depuración en el momento que haga clic en algo en la lista. Pero el resultado de la depuración no se muestra en LogCat.
Solución
El OnItemSelectedListener
escucha para las selecciones de elementos de lista y no la lista clics artículo.
Una selección en este caso podría ser visto como mover el enfoque en este artículo con panel táctil del dispositivo.
Para conseguir el comportamiento deseado debe utilizar el OnItemClickListener
.
Otros consejos
Esto se debe a que se esté probando con los dedos en un dispositivo táctil. En href="http://android-developers.blogspot.com/2008/12/touch-mode.html" modo táctil , no hay un enfoque y ninguna selección. Interfaces de usuario que la selección necesidad debe usar un tipo diferente de widgets, tales como botones de radio.
En un primer momento, se debe configurar ChoiceMode
, y luego, en ListView, habrá no acepta el evento seleccionado porque setOnItemSelectedListener
registed en AdapterView
, y de devolución de llamada en handleDataChanged()
método, pero la clase AbsListView
reemplazar este método y nunca devolver la llamada OnItemSelectedListener
se puede obtener el seletedItem por este método en 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());
}
});