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:
- FindViewById undefined
- Cómo limitar el usuario en DatePicker a sólo puede elegir la fecha antes today_date - 18 años
- Cambiar el color de texto de ListView
- Creación de gestos en android
- ¿Qué componente de visualización utiliza Google Plus App (Stream)?
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 …
- Comando de voz para desbloquear la pantalla de Android
- Cómo configurar el texto en la vista de texto de un widget
- Android NumberPicker no guardar los cambios de EditText
- GridView altura de la fila
- Cómo capturar los cambios de tamaño de widget en dispositivos donde onAppWidgetOptionsChanged no se llama?
- Vertical DrawerLayout o SlidingPaneLayout
- Control de brillo de la pantalla en android utilizando "Background Service"
- Desactivación de SearchView
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.
- Renovar 2 verifica la URL de la llamada
- Android: cómo establecer un valor de gradle de un enum conocido