Cambio de fondo del elemento de vista de lista de Android
Tengo un listview android. Quiero cambiar el fondo del elemento listview cuando hago clic en un elemento de lista.
Y luego el elemento seleccionado anterior debe volver al fondo predeterminado. Esto significa que sólo se debe seleccionar un elemento.
- Confusión en 'posición' en la función instantiateItem en la clase PagerAdapter (android)
- ¿Cómo cambiar la posición de un diálogo de progreso?
- ¿Hay una forma de compensar una vista desde el centro en Android?
- android detecta si el usuario ha rozado
- Establecer la posición del cursor de edición de texto en función de la posición de toque del usuario Android
Lo he buscado durante mucho tiempo. Puedo cambiar el fondo del artículo seleccionado usando onItemClick ()
Pero no puedo cambiar el elemento seleccionado anterior. Por ejemplo, si selecciono el segundo elemento, se cambió. Y luego selecciono el tercer elemento. ¡Oh Dios mío! ¡Es cambiado también! Que puedo hacer por esto ¿Cómo puedo obtener la posición anterior?
Aquí está mi código androide.
private class ListViewItemClickListener implements AdapterView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView title = (TextView) view.findViewById(R.id.title); title.setBackgroundResource(R.drawable.list_shape); } }
- Android: ¿Cómo obtener el actual desplazamiento X de RecyclerView?
- Sistema de Posicionamiento Interior basado en Giroscopio y Acelerómetro
- ArrayAdapter.getPosition (item) Returns ¿Qué?
- getSelectedItemPosition () de un spinner siempre devuelve 0
- Establecer la posición absoluta de una vista
- ¿Cómo rastrear la posición de un dispositivo Android en un edificio?
- Combinando wrap_content en el padre y fill_parent en el niño
- Adición dinámica de un niño a LinearLayout con la obtención de la posición de cada niño
Cuando tengo esto en un ejemplo similar tengo un campo global llamado:
selectedListItem;
Esto se actualizaría en su onitemClickListener y el elemento anterior entonces tendría su fondo devuelto al valor predeterminado.
Así que para actualizar su código:
private class ListViewItemClickListener implements AdapterView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //First update the previously selected item if one has been set if(selectedListItem!=null){ TextView previousTitle = (TextView) selectedListItem.findViewById(R.id.title); previousTitle.setBackgroundResource(R.drawable.list_default_background); } //Then update the new one TextView title = (TextView) view.findViewById(R.id.title); title.setBackgroundResource(R.drawable.list_shape); selectedListItem = view; } }
Así que simplemente initalise selectedListItem
como un campo en su adaptador con el onClickListener
como una clase interna y tiene su fondo predeterminado list_default_background
lugar de list_default_background
.
También puede realizar un seguimiento de los números de posición en lugar de la vista real.
EDITAR:
Para utilizar este método en su lista, también tendrá que realizar un seguimiento de una instancia de ID o de objeto para su elemento de lista específico. En mi propia solución, en el método getView de ListAdapter, me aseguro de que sólo se actualiza el elemento de lista que coincida con el ID / instancia del elemento correcto. Con su código de la manera que es, también encontrará que cuando se desplaza hacia abajo la vista en la misma posición en esta lista de elementos visibles también se actualiza. Esto se debe a que la vista de lista se refiere a la lista en conjuntos de elementos, donde cada conjunto corresponde a los elementos visibles en la pantalla en cualquier momento.
Para actualizar un elemento singular, específico que sería más adecuado para el uso de un fondo selector o indicador como se menciona en las otras respuestas.
HTH
Debe utilizar los métodos integrados de selección de elementos en una vista de lista. Cambiar manualmente el fondo es propenso al error como lo has encontrado.
Agregue este atributo a la vista raíz en su elemento xml de la vista de lista
android:background="?android:attr/activatedBackgroundIndicator"
A continuación, llame a setItemChecked(x, true)
en su ListView donde x es la posición del elemento que desea que se seleccione.
Asegúrese de que su listview tiene un conjunto ChoiceMode
que permite la selección (como "SingleChoice")
Puede cambiar el color del elemento ListView al hacer clic en él como a continuación. Sigue estos pasos.
(Recuerde, esto es para la vista de lista personalizada)
-
Cree un archivo XML en la carpeta dibujable como a continuación:
<item android:drawable="@color/orange" android:state_focused="true"/> <item android:drawable="@color/orange" android:state_pressed="true"/> <item android:drawable="@drawable/listview"></item>
Elija sus propios recursos.
-
Al implementar Custom ListVIew, tendrá un diseño adicional para el diseño del elemento de lista personalizada. A continuación se muestra un ejemplo.
<ImageView android:id="@+id/imageView1" android:layout_width="60dp" android:layout_height="60dp" /> <TextView android:id="@+id/textView1" android:layout_width="fill_parent" android:layout_height="60dp" android:layout_toRightOf="@+id/imageView1" android:background="@drawable/listselect_picture" android:gravity="center" android:text="TextView" android:textColor="@drawable/select_txtcolor" android:textSize="16sp" />
En el código de arriba he puesto el conjunto el archivo XML del paso 1 como atributo "de fondo". Esto funcionará como quieras.
Además, si desea cambiar el color del texto en la selección ListItem también, utilice el código XML a continuación y establezca ese archivo XML como atributo "TextColor".
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="@android:color/white"/> <item android:state_focused="true" android:color="@android:color/white"/> <item android:state_pressed="true" android:color="@android:color/white"/> <item android:color="@android:color/black"/> </selector>
El código anterior cambiará el color del texto mientras está en la selección y volverá al original cuando se haga clic.
- ¿Cómo hablar con un teclado Bluetooth?
- ¿Cómo hacer una galería de imágenes de 2 dimensiones con desplazamiento horizontal y vertical?