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 …

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.

  • Restringir Android Widget a una instancia por dispositivo
  • Compatibilidad con barras de acción
  • Android Diferencia entre View.getLeft () vs View.getScrollX ()
  • Manejo simultáneo de eventos onClick y onTouchEvent
  • Cómo establecer las dos líneas de un ListView utilizando simple_list_item_2?
  • Google Map se está cargando con parches cuadrados
  • Desactivar todas las interacciones de pantalla táctil durante la animación
  • ¿Cómo actualizar SeekBar no disparar OnSeekBarChangeListener?
  • Cómo usar el as del proyecto con ionic 2
  • Eliminación de la barra de notificación en una aplicación de Android
  • Cómo puede obtener texto de textview que se coloca en un widget en la programación de android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.