android - ¿Por qué mi onItemSelectedListener no se llama en un ListView?
onitemselected android (3)
Al principio, debe establecer ChoiceMode
, y luego, en ListView, no se aceptará el evento seleccionado porque setOnItemSelectedListener
registró en AdapterView
, y callback en el método handleDataChanged()
, pero la clase AbsListView
anula este método y nunca se OnItemSelectedListener
puede obtener el elemento seleccionado con 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());
}
});
Estoy usando un ListView configurado de esta manera:
<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 un OnItemSelectedListener al ListView como este:
getListView().setAdapter(adapter);
getListView().setOnItemSelectedListener(this);
mi Actividad implementa al oyente así:
@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 vería esta salida de depuración en el momento en que hago clic en algo en la lista. Pero la salida de depuración nunca se muestra en LogCat.
Es porque estás probando con los dedos en un dispositivo táctil. En el modo táctil , no hay foco ni selección. Las IU que necesitan selección deben usar un tipo diferente de widget, como botones de opción.
OnItemSelectedListener
escucha las selecciones de elementos de la lista y no hace clic en los clics de los elementos.
Una selección en este caso podría verse como mover el foco en este elemento con el panel táctil del dispositivo.
Para obtener el comportamiento deseado uno debe usar OnItemClickListener
.