65 votes

Android ListView setSelection() ne semble pas fonctionner

J'ai un ListActivity qui implémente onListItemClick() et appelle une doSomething() fonction de la classe. Ce dernier contient l.setSelection(position)l est le ListView objet.

Maintenant, il y a un onClickListener() écoute pour un clic sur un bouton qui perfoms certaines actions et que trop à des appels doSomething().

Dans le premier cas, l'élément sélectionné à se positionner de façon appropriée, mais dans le second, il ne se passe rien.

Des indices au sujet de cet étrange comportement et comment je pourrais le faire fonctionner?

104voto

meizilp Points 2271

peut-être vous avez besoin d'utiliser la fonction:

ListView.setItemChecked(int position, boolean checked);

65voto

AlexD Points 421

utiliser requestFocusFromTouch() avant d'appeler setSelection() méthode

33voto

mr_hyde Points 32

Je sais que c'est une vieille question, mais j'ai juste eu un problème similaire que j'ai résolu de cette façon:

mListView.clearFocus();
mListView.post(new Runnable() {
    @Override
    public void run() {
        mListView.setSelection(index);
    }
});

15voto

kostmo Points 2265

Vous pourriez avoir besoin pour envelopper setSelection() en posted Runnable (référence).

13voto

CommonsWare Points 402670

setSelection() n'a pas nécessairement d'impact visuel. La barre de sélection ne s'affiche que si vous utilisez le D-pad/boule de commande pour naviguer dans la liste. Si vous appuyez sur l'écran pour cliquer sur quelque chose, la barre de sélection s'affiche brièvement et s'évanouit.

Par conséquent, setSelection() n'aura qu'un impact visuel si l'activité n'est pas en mode tactile (c'est à dire, la dernière chose que l'utilisateur n'était d'utiliser le D-pad/boule de commande).

Je ne suis pas certain à 100% c'est ce qui explique votre phénomène compte tenu de la description que vous avez fourni, mais j'ai pensé qu'il vaut le coup...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X