Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Mostrar la selección actual en un listview

Como se ve en la versión de tablet de gmail y google talk estoy tratando de mostrar la selección actual en un listview. Sé que esto no es una práctica estándar y debe evitarse cuando sea necesario. En mi programa, el listview siempre aparece en la pantalla y el ítem que se hace clic muestra un nuevo fragmento a la derecha (similar a gmail y google talk).

Para evitar que el usuario adivine qué elemento se ha seleccionado, quisiera mostrar la selección actual, intenté crear un selector pero después de hacer clic en él cambia de nuevo al fondo normal.

¿Cómo puedo conseguir esto?

Este es mi selector xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/list_item_bg2" android:state_pressed="false" android:state_selected="false" android:state_focused="false"/> <item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true"/> <item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="false" android:state_selected="true" android:state_checked="false"/> <item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="true" android:state_selected="false"/> <item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="false" android:state_selected="false" android:state_checked="true"/> <item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true" android:state_focused="true" android:state_selected="true" android:state_checked="true"/> <item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true"/> </selector> 

4 Solutions collect form web for “Mostrar la selección actual en un listview”

Lo que Gmail y aplicaciones similares usan es el estado activated , con un diseño de fila adecuado. Ver:

  • Configuración del fondo de Android y la barra de menús de persistencia – El uso de atributos en las versiones anteriores causa un fallo – ¿Existe un enfoque de tema / patrón?
  • Cambiar el color del fondo del elemento de lista activado en Honeycomb

En pocas palabras, usted:

  • Utilice un diseño de fila con un fondo activado (por ejemplo, android.R.layout.simple_list_item_activated_1 )
  • Utilice setChoiceMode(ListView.CHOICE_MODE_SINGLE) en su ListView
  • "Marque" la fila que debe activarse usando setItemChecked() en su ListView para activar el estado "activado" y tener el resaltado persistente

Su otra opción es establecer el fondo de su elemento de lista personalizada en android: background = "? Android: attr / activatedBackgroundIndicator"

Si utiliza un diseño personalizado para cada fila:

  1. Crear un selector con android: state_activated = "true"
  2. Aplicarlo como el fondo del diseño personalizado.

Un ejemplo del selector estirable:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime"> <item android:state_activated="true" android:drawable="@color/android_green" /> <item android:drawable="@android:color/transparent" /> </selector> 

Lo que funcionó para mí

  1. Reemplazar el estilo ListView global en su tema

    <item name="android:listViewStyle">@style/MyListView</item>

  2. Defina su estilo

    <style name="MyListView" parent="@android:style/Widget.ListView"> <item name="android:listSelector">@drawable/listview_background_selector</item> </style>

  3. Define el selector listview_background_selector.xml

    <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_mediumAnimTime" android:exitFadeDuration="@android:integer/config_mediumAnimTime"> <item android:drawable="@color/ListViewBackGroundColorPressed" android:state_activated="true" /> </selector>

  4. Establecer el fondo de su listview-item-layout

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

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.