J'ai un affichage de la liste complète des articles, après les utilisateurs sélectionne un élément, il s'allume, et puis il va revenir à la normale. Est-il un moyen de faire en sorte que lorsque l'utilisateur sélectionne un élément dans ma ListView il reste sélectionné, et mis en avant?
source d'informationauteur aryaxt
Apparemment de la "disparition de sélection" est voulu par la conception; c'est quelque chose qui s'appelle "le mode tactile". J'ai lu ce document et je n'ai encore aucune idée de pourquoi ils ont pensé que c'était une bonne idée. Ma conjecture est que, depuis Android a été conçu à l'origine pour le petit écran des appareils, ils espèrent que vous remplissez l'écran avec une liste et ensuite, lorsque l'utilisateur clique sur un élément, le passage à une nouvelle liste sur un autre écran. Ainsi, l'utilisateur ne serait pas au courant que Android perdu la trace de l'élément sélectionné.
Mais c'est un comportement assez gênant si, par exemple, vous souhaitez que l'utilisateur puisse sélectionner un élément, puis afficher les informations à propos de cet article sur le même écran. Si la sélection disparaît, comment est l'utilisateur censés savoir ce qu'ils ont cliqué (en supposant bien sûr que les utilisateurs ont la capacité d'attention d'un poisson rouge)?
Une solution possible est de changer tous les éléments de la liste en boutons radio. Je n'aime pas cette solution, car il déchets d'écran de l'immobilier. Je préfère suffit d'utiliser la couleur d'arrière-plan pour afficher l'élément sélectionné. J'ai vu une solution jusqu'à présent, mais il n'est pas tout à fait complète ou général. Alors, voici ma solution:
1. Dans votre XML fichier de mise en page
Aller à votre élément ListView et l'attribut suivant:
android:choiceMode="singleChoice"
. Je ne suis pas entièrement sûr de ce que cela fait (par lui-même, il ne permet pas à l'utilisateur de sélectionner quoi que ce soit), mais sans cet attribut, le code ci-dessous ne fonctionne pas.2. Définir la classe suivante
Il est utilisé pour garder la trace de l'élément sélectionné, et vous permet également de simuler le passage par référence en Java:
3. Placez le code suivant quelque part
Je vais supposer que vous mettez dans votre Activité, mais il peut aller dans n'importe quelle classe:
Ce code fait deux choses: il s'attache vos éléments de liste (par exemple,
List<String>
) à votre Liste, et il remplaceArrayAdapter.getView()
avec un code qui change l'arrière-plan de l'élément sélectionné.4. L'utilisation de ce code pour configurer votre liste
Par exemple:
C'est tout! Le ci-dessus suppose que vous voulez de sélection unique. Avec quelques petites modifications à getView(), vous pourriez prendre en charge multi-sélection de trop, je suppose, mais vous devriez probablement utiliser des cases à cocher à la place.
Avertissement: cette solution doit encore se développer. Si l'utilisateur utilise les touches fléchées ou les touches pour sélectionner un élément, cet élément pas être sélectionné à partir de la IntHolder point de vue. Si l'utilisateur appuie sur le non-étiqueté bouton (ce qui est le nom de ce bouton? "Entrez"?) ensuite, l'élément va devenir "officiellement" sélectionné, mais alors vous avez un autre problème, car si l'utilisateur utilise les touches fléchées de nouveau, il sorte de ressemble deux éléments sont sélectionnés. Laissez un commentaire si vous le trouver comment garder la "sélection interne" dans le IntHolder synchronisé avec le "clavier de sélection" ou quelque chose comme ça. Ce est ça s'appelle, de toute façon?
Il y a un attribut dans ListView appelé listSelector:
http://developer.android.com/reference/android/widget/AbsListView.html#attr_android:listSelector
MODIFIER après Stan commentaire
Pour s'assurer qu'un
ListView
reste sélectionné, vous devez① Définir l'affichage de l'attribut
choiceMode
via xml ou par programmation.② Utiliser un adaptateur permettant d'utiliser des points de vue qui mettent en œuvre
Vérifiable
interface, commeCheckedTextView
(à l'intérieur desimple_list_item_single_choice
mise en page).Fichier
TestActivity.java
Ici une solution plus simple que Qwertie:
Ne s'appuient pas sur des mécanismes de sélection. Le faire vous-même.
Aussi cette méthode ne traite qu'avec les clics et ne fonctionnera pas si l'utilisateur utilise les touches fléchées.
Avertissement: De-soulignant après tactile ne fonctionne pas de manière fiable.
Crédits pour le toucher de la partie aller à ozik.dev:
Obtenir l'Élément de ListView seulement avec OnTouchListener
juste ajouter ceci à votre listview disposition
Utiliser un Selector.XML Fichier et ce code:
Juste ajouter ceci à votre ListView:
Cette réponse est de travailler essayer celui-ci