2011-01-28 2 views
1

J'ai un edittext et une listview dans une disposition linéaire. Supposons qu'il y ait 5 résultats actuellement visibles dans la liste sur un total de 10.Quand je descends du texte d'édition sur le listview, le 5ème item dans la listview (je suppose que c'est toujours le dernier) obtient le focus, au lieu du premier item! Comment devrais-je résoudre ceci?Le premier élément dans listview n'obtient pas le focus

Répondre

0

1) Créez un gestionnaire, en tant que champ dans votre activité. Comme ceci:

private Handler myHandler = new Handler(); 

2) Lorsque vous créez ListView, ajoutez un OnFocusChangeListener, comme indiqué ci-dessous.

myList.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus) { 
       myHandler.postAtFrontOfQueue(new Runnable() { 
        public void run() { 
         myList.setSelection(0); 
        } 
       }); 
      } 
     } 
    }); 
+0

Bien que cela fonctionne mais c'est un appel coûteux je suppose. Voici ce que dit la documentation: «Cette méthode est uniquement destinée à une utilisation dans des circonstances très particulières: elle peut facilement priver la file d'attente des messages, provoquer des problèmes de commande ou avoir d'autres effets secondaires inattendus.». cette? –

+0

Si vous partagez votre gestionnaire avec d'autres routines, ce qui ne résout pas le problème de mise au point de ListView, vous devez vraiment vous soucier de l'utilisation de cette méthode. Par conséquent, je suggère que vous utilisiez le gestionnaire créé juste à cet effet. Faire comme ça, vous n'aurez pas de problèmes de file d'attente. –

+0

Cette solution est loin d'être élégante. Dans le cas où vous faites face, le comportement de focus de ListView devrait être ceci par défaut ou il doit y avoir une propriété spécifique à cet effet. Pour l'instant, c'est ma suggestion dans ce cas. –

Questions connexes