2012-10-05 57 views
11

En mi aplicación quiero hacer algo similar a la aplicación de gmail en 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 estado seleccionado) es visible.Android: establecer lista ver el elemento como "seleccionado" (resaltado)

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 la disposición lineal de la parte superior del elemento de lista:

android:background="@drawable/listitem_background" 

(intenté configurar esto como listselector, también)

3) Esta es la lista de visualización:

<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 de código Traté de jugar con esto:

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

[EDIT] De hecho, me he dado cuenta de que la selección se pierde después de la confirmación del fragmento de la derecha lado de la pantalla. Si no cometo el fragmento funciona como un encanto ... 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 esta ...

Respuesta

45

bien, finalmente consiguió mi respuesta.

La idea es utilizar el 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 el selector debe mira como:

<?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 el diseño elemento de la lista debe ser:

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

gracias. esto funcionó para mí :) –

+0

no funciona para api 8 –

4

que enfrentan el mismo problema y entonces sólo necesita una simple línea en mi vista del elemento XML.

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

This post podría ayudar a

+0

Solo para api level> = 14 – johntheripp3r

Cuestiones relacionadas