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
Vous devez vous connecter pour publier un commentaire.
ajouter cette ligne dans le démarrage de votre activité
où lv est l'instance de contrôle listView
alors remplacer cette méthode et ajouter les lignes suivantes.
puis de modifier la couleur du précédent de l'élément sélectionné d'arrière-plan de retour à la normale dans la méthode getView de votre coutume adaptateur
Salut Velja, j'ai fait quelques changements dans ma réponse, j'espère être utile pour vous.
OriginalL'auteur Ravinder Bhandari
Essayez ceci:
listitem.xml
list_selector.xml
Quel type d'erreur? Pouvez-vous me donner? Parce qu'il fonctionne très bien.
l'erreur que j'ai obtenu est ici: "Cet article est inaccessible en raison d'un précédent article (item #1) est plus général de match que celui-ci"
Je pense que vous vouliez l'appeler la 2. Fichier XML list_day_selector.xml.
OriginalL'auteur Luc
Par programmation, utilisez setSelector. Par exemple:
OriginalL'auteur Oleksandr Bondarchuk
Après quelques heures de la rencontre un problème après l'autre (y compris le sélecteur en laissant une sale bande), j'ai décidé de le faire moi-même:
avec le OnItemClickListener:
et les fonctions définies comme suit:
et l'élément de la liste XML (res/layout/mylistitem.xml) est:
L'inconvénient est qu'après la modification de la sélection que j'ai à mise à jour(): il n'y a pas de moyen facile de unhighlight l'a souligné précédemment vue.
OriginalL'auteur 18446744073709551615
Je pense que vous cann pas utiliser mListView à l'intérieur de la classe anonyme. Vous devez utiliser AdapterView arg0
OriginalL'auteur Rafael Ruiz Tabares
Ce post a fonctionné pour moi: http://www.mynewsfeed.x10.mx/articles/index.php?id=14
La liste (à l'intérieur layout.xml):
Sélecteur de drawable(list_custom.xml):
Color.xml dans les valeurs de dossier:
OriginalL'auteur user3572058