studio programacion herramientas fundamentos con avanzado aplicaciones android listview selector highlight

programacion - Android: establece el elemento de vista de lista como "seleccionado"(resaltado)



manual de android en pdf (2)

En mi aplicación quiero hacer algo similar a la aplicación de gmail en las tabletas, en la izquierda para tener la lista de elementos y en el derecho a tener un fragmento con el contenido de ese elemento, como para la aplicación de gmail este contenido se está descargando después de la selección . Después de hacer clic en un elemento, quiero que permanezca resaltado hasta que, por supuesto, cambie la selección. Llegué a un punto donde esto funciona, pero solo si hago clic dos veces en el mismo elemento, entonces primero hago clic, la selección funciona y luego el elemento vuelve a su estado ''predeterminado'' y si vuelvo a hacer clic en él, el selector (para seleccionar estado) es visible.

Esto es lo que tengo hasta ahora:

1) El selector (listitem_background.xml)

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/solid_white" android:state_pressed="false" android:state_selected="false"/> <item android:drawable="@drawable/listitem_pressed" android:state_pressed="true"/> <item android:drawable="@drawable/listitem_focused" android:state_selected="true"/> </selector>

2) Para el diseño lineal superior del elemento de la lista:

android:background="@drawable/listitem_background"

(Traté de configurar esto como listselector, también)

3) Este es el ListView:

<ListView android:id="@+id/my_list_view" android:layout_width="fill_parent" android:layout_height="wrap_content" android:choiceMode="singleChoice" android:dividerHeight="1dp" android:drawSelectorOnTop="true" android:fadeScrollbars="true" android:fastScrollEnabled="true" android:focusable="true" android:focusableInTouchMode="true" android:scrollbarFadeDuration="100" android:scrollbars="vertical" />

4) En la parte del código intenté jugar con esto:

@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { view.setSelected(true); ... }

[EDITAR] De hecho, he notado que la selección se pierde después de la confirmación del fragmento en el lado derecho de la pantalla. Si no comprometo el fragmento, funciona como un amuleto ... Creo que necesito algo como esto en el selector:

<item android:drawable="@drawable/listitem_focused" android:state_activated="true" android:state_focused="false"/>

Pero obviamente no esto ...


OK, finalmente obtuve mi respuesta.

La idea es usar state_activated en el selector y

listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE)

en el código, o

android:choiceMode="singleChoice"

en el xml, por supuesto

Así es como debe verse el selector:

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/solid_white" android:state_activated="false"/> <item android:drawable="@drawable/solid_white" android:state_activated="false" android:state_pressed="false"/> <item android:drawable="@drawable/listitem_pressed" android:state_pressed="true"/> <item android:drawable="@drawable/listitem_focused" android:state_activated="true"/> </selector>

Así es como debería ser el diseño del elemento de la lista:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/listitem_background" android:orientation="vertical" > ... <LinearLayout/>


Enfrenté el mismo problema y luego solo necesité una línea simple en mi vista de elemento xml.

android:background="?android:attr/activatedBackgroundIndicator"

Esta publicación podría ayudar