Mettez en surbrillance l'élément sélectionné dans la vue liste sur Android

J'ai été faire une application qui fonctionne avec les ListViews sous Android, et je peux pas faire en sorte que la sélection de la (chacked) de l'élément a un arrière-plan différent. Je suis en utilisant CHOICE_MODE_SINGLE. C'est de cette façon que mon code a l'air tellement loin:


La liste que j'utilise:

(à l'intérieur de layout.xml)

<ListView
    android:id="@+id/listView"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:choiceMode="singleChoice"
    android:listSelector="@drawable/selector_test" >
</ListView>

Le TextView mise en page j'utilise l'adaptateur:

(listItem.xml)

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listItem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="23sp"
    android:textStyle="bold" />

C'est là que j'ai ajouter la carte:

mListAdapter = new ArrayAdapter<String>(this, R.layout.listItem, mList);
mListView = (ListView) findViewById(R.id.listView);
mListView.setAdapter(mAuthorAdapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
        String selected = mList.get(position);
        //...
        mListView.setItemChecked(position, true);
    }
});

Je suis sûr que le bon point est vérifié sur un clic, parce que quand je l'appelle getCheckedItemPosition(), elle renvoie la valeur correcte.


Et maintenant, les deux choses que j'ai essayé de mettre en évidence l'élément coché:


Sélecteur de drawable:

(selector_test.xml)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_longAnimTime">

    <item android:state_checked="true"><shape>
            <solid android:color="@color/red" />
        </shape></item>
    <item android:state_selected="true"><shape>
            <solid android:color="@color/blue" />
        </shape></item>
    <item android:state_pressed="true"><shape>
            <solid android:color="@color/green" />
        </shape></item>

</selector>

Je ajouter .xml avec:

android:listSelector="@drawable/selector_test"

Fond drawable:

(background_test.xml)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/red" android:state_checked="true"/>
    <item android:drawable="@color/blue" android:state_selected="true"/>
    <item android:drawable="@color/green"/>

</selector>

Je ajouter .xml avec:

android:background="@drawable/background_test"

J'ai essayé d'ajouter le sélecteur et l'arrière-plan à la fois listView.xml et listItem.xml mais la seule chose qui change, c'est la couleur de fond par défaut, et la couleur de la sélection lorsque l'élément est pressé (ou lieu).

android:state_checked="true" et android:state_selected="true" semblent ne servir à rien.

Je peux changer le fond en remplaçant la getView() la méthode en ArrayAdapter et de l'invocation de setBackgroundColor (a) si le point de vue est sélectionné, et il n'modifier l'arrière-plan, mais également de se débarrasser de la sélection entièrement. Aussi, je n'aime pas vraiment pour remplacer les classes juste pour changer une ligne de code, en particulier si la même chose peut être réalisé d'une manière différente.

Donc ce que je demande, est-il un moyen de mettre en valeur des éléments cochés dans la ListView par l'ajout d'un sélecteur ou d'arrière-plan dessiné, et je suis tout à fais mal, ou devrai-je le faire fonctionner d'une autre manière.

Merci d'avance! 🙂

OriginalL'auteur Velja | 2014-03-03