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.

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); } } 

3 Solutions collect form web for “Cambio de fondo del elemento de vista de lista de Android”

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)

  1. 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.

  2. 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.

  • Confusión en 'posición' en la función instantiateItem en la clase PagerAdapter (android)
  • Android: Utilizar el elemento seleccionado en AutoCompleteTextView para rellenar otro campo
  • Combinando wrap_content en el padre y fill_parent en el niño
  • ¿Hay una forma de compensar una vista desde el centro en Android?
  • ¿Cuál es el propósito de item-id en Android ListView Adapter?
  • Establecer la posición del cursor de edición de texto en función de la posición de toque del usuario Android
  • Sistema de Posicionamiento Interior basado en Giroscopio y Acelerómetro
  • Establecer la posición absoluta de una vista
  • ArrayAdapter.getPosition (item) Returns ¿Qué?
  • ¿Cómo cambiar la posición de un diálogo de progreso?
  • Android - Establecer Layout_Gravity de forma programática para LinearLayout
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.