Problème de focus ListView


Introduction à cette section

Si vous ajoutez Button, CheckBox, EditText et d'autres contrôles à l'élément de ListView, vous devrez peut-être considérer A un problème : un problème de focus de ListView ! Dans cette section, nous apprendrons plusieurs façons de résoudre ce problème !

Nous pouvons écrire une simple listView avec un Button, CheckBox et EditText, mais lorsque nous cliquons, nous constatons que Il n'est pas possible de cliquer sur l'élément ListView, la méthode onItemClick ne peut pas être déclenchée et la méthode onItemLongClick ne peut pas être déclenchée. Il s’agit d’un problème central de ListView ! Cela signifie que le focus de ListView est récupéré par d'autres contrôles. Voyons comment. Résoudre ce problème ?


Méthode 1 : Définir : android:focusable="false" pour le composant qui a préempté le paramètre de contrôle de contrôle

android:focusable="false"
peut résoudre ce problème problème Ou appelez après avoir obtenu le contrôle dans le code :

setFocusable(false) !! De plus, EditText ne fonctionne pas si nous définissons android:focusable="false", ce B peut obtenir le focus mais tout d'un coup. soudain Le focus est à nouveau perdu et le petit clavier n'apparaîtra pas. Je ne sais pas encore comment le résoudre. J'ai entendu d'autres dire qu'il s'agissait d'un bug dans ListView. Si vous connaissez la solution, faites-le moi savoir, merci~

Méthode 2 : définir le nœud racine de l'élément android:descendantFocusability="blocksDescendants"

Comme mentionné, dans Item, ajoutez simplement l'attribut ci-dessus au nœud racine de la mise en page,

android:descendantFocusability="blocksDescendants"
De plus, cet attribut a trois valeurs facultatives :

<🎜. >beforeDescendants

 : viewgroup donnera la priorité à ses contrôles de sous-classe et obtiendra le focus
  • afterDescendants : viewgroup n'obtiendra le focus que lorsque ses contrôles de sous-classe n'auront pas besoin d'obtenir le focus
  • blocksDescendants : Le groupe de vues remplacera le contrôle de la sous-classe et obtiendra directement le focus
  • Résumé de cette section :

D'accord, ce qui précède est la solution Deux méthodes pour le problème de focus ListView, très simple, s'il y a quelque chose à propos d'EditText Les solutions pour cibler les problèmes sont les bienvenues, merci~