J'ai passé environ 6 heures là-dessus jusqu'à présent et je n'ai rencontré que des barrages routiers. Le principe général est qu'il y a une ligne dans un ListView
(qu'elle soit générée par l'adaptateur ou ajoutée en tant que vue d'en-tête) qui contient un EditText
widget et un fichier Button
. Tout ce que je veux faire, c'est pouvoir utiliser le jogball / les flèches, pour naviguer dans le sélecteur vers des éléments individuels comme d'habitude, mais quand j'arrive à une ligne particulière - même si je dois identifier explicitement la ligne - qui a un focusable enfant, je veux que cet enfant se concentre au lieu d'indiquer la position avec le sélecteur.
J'ai essayé de nombreuses possibilités et jusqu'à présent, je n'ai pas eu de chance.
disposition:
<ListView
android:id="@android:id/list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
/>
Vue d'en-tête:
EditText view = new EditText(this);
listView.addHeaderView(view, null, true);
En supposant qu'il existe d'autres éléments dans l'adaptateur, l'utilisation des touches fléchées déplacera la sélection vers le haut / bas dans la liste, comme prévu; mais en arrivant à la ligne d'en-tête, il est également affiché avec le sélecteur, et aucun moyen de se concentrer sur l' EditText
utilisation du jogball. Remarque: en tapant sur le EditText
sera le concentrer à ce moment - là, mais qui repose sur un écran tactile, ce qui ne devrait pas être une exigence.
ListView
a apparemment deux modes à cet égard:
1 setItemsCanFocus(true)
.: le sélecteur n'est jamais affiché, mais le EditText
peut obtenir le focus en utilisant les flèches. L'algorithme de recherche de focus est difficile à prédire et aucun retour visuel (sur les lignes: avoir des enfants focalisables ou non) sur quel élément est sélectionné, les deux pouvant donner à l'utilisateur une expérience inattendue.
2 setItemsCanFocus(false)
.: le sélecteur est toujours dessiné en mode non tactile et EditText
ne peut jamais obtenir la mise au point, même si vous appuyez dessus.
Pour aggraver les choses, l'appel editTextView.requestFocus()
renvoie true, mais en fait ne donne pas le focus EditText.
Ce que j'envisage est fondamentalement un hybride de 1 et 2, où plutôt que le paramètre de liste si tous les éléments sont focalisables ou non, je souhaite définir la focalisation pour un seul élément de la liste, de sorte que le sélecteur passe de manière transparente à la sélection du ligne entière pour les éléments non focalisables et traversant l'arborescence du focus pour les éléments contenant des enfants focalisables
N'importe quels preneurs?