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

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.

  • Android Web App: Posición: fijo roto?
  • ¿Configurar el pulgar en una posición particular (no en el desplazamiento) de seekbar mediante programación?
  • Textview en el botón (arriba), no funciona en Android 5 (API 21)
  • Android: Utilizar el elemento seleccionado en AutoCompleteTextView para rellenar otro campo
  • ViewPager Adapter getItem siempre llamado para el índice 0 y 1
  • ¿Cuál es el propósito de item-id en Android ListView Adapter?
  • RecyclerView - ¿Cómo suavizar desplazamiento a la parte superior del elemento en una posición determinada?
  • Android - Establecer Layout_Gravity de forma programática para LinearLayout
  • Establecer gravedad para LinearLayout mediante programación
  • Cómo cambiar la posición de inicio de la pista de Android SeekBar?
  • Obtener la ubicación secundaria en HorizontalScrollView y desplácese hasta ella
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.