Android ListView: cómo seleccionar un elemento?

Tengo problemas con un ListView que creé: Quiero que un elemento se seleccione cuando haga clic en él.

Mi código para esto se parece a:

protected void onResume() { ... ListView lv = getListView(); lv.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long id) { Log.v(TAG, "onItemSelected(..., " + pos + ",...) => selected: " + getSelectedItemPosition()); } public void onNothingSelected(AdapterView<?> adapterView) { Log.v(TAG, "onNothingSelected(...) => selected: " + getSelectedItemPosition()); } }); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) { lv.setSelection(pos); Log.v(TAG, "onItemClick(..., " + pos + ",...) => selected: " + getSelectedItemPosition()); } }); ... } 

Cuando ejecuto esto y haga clic, por ejemplo, en el segundo elemento (es decir, pos = 1) Me sale:

 04-03 23:08:36.994: V/DisplayLists(663): onItemClick(..., 1,...) => selected: -1 

es decir, a pesar de que el OnItemClickListener se llama con el argumento adecuado y llama a setSelection (1), no hay ningún elemento seleccionado (y por lo tanto también OnItemSelectedListener.onItemSelected (…) nunca se llama) y getSelectedItemPosition () setSelection (1) -llamada.

¿Qué me estoy perdiendo?

Miguel

PS .: Mi lista tiene> = 2 elementos …

3 Solutions collect form web for “Android ListView: cómo seleccionar un elemento?”

El elemento que falta aquí es choiceMode . Esto no está muy bien documentado , pero ListViews (y por extensión, cualquier cosa que hereda de AbsListView, como GridView, etc.) en android por defecto no permiten la selección, pero se puede habilitar – en XML o en código:

en XML:

 <ListView ... android:choiceMode="singleChoice" /> 

Código:

 mListView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE); 

Tenga en cuenta que una vez que haga esto, android setSelection() para usted, por lo que no es necesario realizar un seguimiento de sí mismo. En ese momento su onClickListener es sólo para guardar la selección y ni siquiera me molesta con el OnSelectedItemListener:

 @Override public void onItemClick(final AdapterView<?> list, final View v, final int position, final long id) { Participant p = mAdapter.getParticipantForId(id); eventManager.fire(new ParticipantSelectedEvent(p)); pxList.smoothScrollToPosition(position); // Make sure selection is plainly visible } 

Prueba esto:–

  ListView lv = getListView(); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // selected item String product = ((TextView) view).getText().toString(); Toast.makeText(getApplicationContext(), "Selected Item :" +product, Toast.LENGTH_SHORT).show(); } }); 

Espero que te ayude.

Me di cuenta, que estaba completamente fuera. En modo táctil, no tiene sentido en absoluto, seleccionar un elemento. Simplemente opere directamente en él, cuando se hace clic (y OnClickListener se llama). Estoy empezando a apreciar, que Android se ocupa de todos estos diferentes dispositivos, que tienen botones de control de dirección, pantallas táctiles, etc Simplemente no siempre es fácil de imaginar, cómo se hace una operación en un dispositivo que no se utiliza o no puede probar.

  • Permitir a los usuarios introducir un nuevo valor en Spinner
  • Biblioteca de vista o fragmento para componer la interfaz de usuario para tipos de datos comunes
  • Android: ¿una galería vertical?
  • Uso de DatePicker sin selector de día
  • Cómo establecer el ancho que es igual a otro widget en android
  • ¿Por qué findViewById (...) devuelve null?
  • Gráficos basados ​​en XML versus png drawables?
  • Forzar el widget de Android a actualizar
  • Cómo cambiar el estilo selector de números en Android?
  • ¿Cómo actualizar SeekBar no disparar OnSeekBarChangeListener?
  • Desplazamiento mediante programación de un EditText
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.