2012-03-15 20 views
27

Como se ve en la versión de tableta de gmail y google talk, estoy tratando de mostrar la selección actual en una vista de lista. Sé que esto no es una práctica estándar y debe evitarse cuando sea necesario. En mi programa, la vista de lista siempre está en la pantalla y el elemento seleccionado muestra un nuevo fragmento a la derecha (similar a Gmail y Google Talk).Mostrando la selección actual en una vista de lista

Para evitar que el usuario adivine qué elemento ha sido seleccionado, me gustaría mostrar la selección actual, intenté crear un selector pero después de hacer clic se vuelve al fondo normal.

¿cómo puedo lograrlo?

esta es mi selector de 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> 

Respuesta

72

Lo Gmail y aplicaciones similares uso es el estado activated, con un diseño fila correspondiente. Ver:

En pocas palabras, usted:

  • utilizar un diseño de fila con un fondo activado (por ejemplo, android.R.layout.simple_list_item_activated_1)
  • Uso setChoiceMode(ListView.CHOICE_MODE_SINGLE) en su ListView
  • "cheque" de la fila que se activará mediante setItemChecked() en su ListView para permitir que el estado "activado" y tienen el punto culminante persistente
+1

+1 y gracias por la buena respuesta. – PhatHV

+1

excelente funcionó como yo quería más una explicación si necesito cambiar el color de fondo! – tyczj

+0

Muy útil ya que estaba tratando de resaltar mis textviews cuando se seleccionó, pero estaban ocurriendo duplicados. Su explicación simplemente resolvió mi problema y ya no necesito hacer que mi hijo sea visto como setSelected (verdadero). Gracias – iabhi

7

Si utiliza un diseño personalizado para cada fila:

  1. crear un selector con android: state_activated = "true"
  2. aplicarlo como fondo del diseño personalizado.

un ejemplo de la dibujable selector:

<?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> 
+0

Esto funcionó para mí mientras que otro método no lo hizo! ¡Gracias! Desde el código: listview.setChoiceMode (ListView.CHOICE_MODE_SINGLE); listview.setItemChecked (3, verdadero); listview.setSelection (3); Aquí el "3" es el índice del elemento que se seleccionará. setItemChecked aplica el fondo de color dibujable y setSelection hace que la lista se desplace automáticamente hacia ese elemento. –

9

Su otra opción es configurar el fondo de su elemento de la lista personalizada a androide: Fondo = "android:? Attr/activatedBackgroundIndicator"

+0

Sí, esta es la manera. Pero quiero aplicar esta función al nivel 8 de la API. –

0

lo que funcionó para mí

  1. anulación ListView mundial S Tyle en su tema

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

  2. definir su estilo

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

  3. definen el listview_background_selector 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. establece el fondo de la vista de lista-elemento-diseño

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

Cuestiones relacionadas