studio - resaltando el elemento seleccionado en la vista de lista en Android
progressbar en android studio (4)
En listview xml agrega el modo "singleChoice"
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:choiceMode="singleChoice"
(...) >
</ListView>
En el diseño del elemento de la lista, agrega
android: background = "? android: attr / activatedBackgroundIndicator
ejemplo
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="?android:attr/activatedBackgroundIndicator">
<!-- your item content-->
</LinearLayout>
Tengo 1 lista de contactslist
vista de lista. Escribí el código para resaltar el elemento seleccionado en ListView
. Está funcionando. Cuando hago clic en 1 elemento, se resalta ese elemento, pero el problema es que si hago clic en otro elemento también lo resaltaré. Quiero resaltar solo el elemento seleccionado. La selección anterior deberá desaparecer cuando haga clic en otro elemento.
arg1.setBackgroundResource(R.drawable.highlighter);
Este es el código en el oyente click que usa para resaltar el elemento seleccionado. por favor ayudame.
Actualizar
Estoy configurando el fondo de las filas en el adaptador:
public int[] colors = new int[]{0xFFedf5ff, 0xFFFFFFFF};
public int colorPos;
[...]
colorPos = position % colors.length;
row.setBackgroundColor(colors[colorPos]);
Pruebe esto en onListItemClick
view.getFocusables(POSITION);
view.setSelected(true);
Destaca la selección.
Una mejor forma es en su tema, @ drawable / list_selector
list_selector.xml:
<!-- <item android:drawable="@color/android:transparent" android:state_selected="true" /> -->
<item android:drawable="@color/list_bg" android:state_selected="true"/>
<item android:drawable="@color/list_bg" android:state_activated="true"/>
<item android:drawable="@color/transparent"/>
luego establece el fondo para la raíz de tu list_row.xml android: background = "? android: attr / activatedBackgroundIndicator"
ListViews
de forma predeterminada no tiene un conjunto de choiceMode
(está configurado en none
), por lo que la selección actual no se indica visualmente.
Para cambiar esto, solo necesita establecer el atributo choiceMode
de su ListView
a singleChoice
.
Si desea un fondo personalizado para los elementos seleccionados en su lista, también debe establecer el atributo listSelector
. Allí puede especificar no solo los colores, sino también los drawables (imágenes, capas / estado-dibujables).
<ListView android:id="@+id/my_list"
android:choiceMode="singleChoice"
android:listSelector="@android:color/darker_gray" />
Si no usa un ListView
directamente, sino una ListActivity
, estos atributos deben establecerse a partir del código, por lo que debe ampliar el método onCreate
su actividad con estas líneas:
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setSelector(android.R.color.darker_gray);
Por lo tanto, si estaba usando un oyente de clic para cambiar el fondo de la fila seleccionada, elimínelo de su código y utilice el método adecuado desde arriba.
Responder a la actualización
Si configura el fondo de su método getView, en lugar de usar un color estático, aplique una lista de estado dibujable al fondo de la fila con duplicadoParentState establecido en verdadero. De esta forma cambiará su visualización en función del estado actual del elemento: normal, enfocado, presionado, etc.