J'aime que mes interfaces utilisateur soient intuitives; chaque écran doit guider naturellement et discrètement l'utilisateur vers l'étape suivante de l'application. À part cela, je m'efforce de rendre les choses aussi déroutantes et déroutantes que possible.
Je rigole :-)
J'ai trois TableRow
s, chacun contenant un contrôle EditText en lecture seule et non focalisable, puis un bouton à sa droite. Chaque bouton démarre la même activité mais avec un argument différent. L'utilisateur y fait une sélection et la sous-activité se termine, en remplissant la sélection appropriée EditText
avec la sélection de l'utilisateur.
C'est le mécanisme classique des valeurs en cascade; chaque sélection réduit les options disponibles pour la sélection suivante, etc. Ainsi, je désactive les deux contrôles sur chacune des lignes suivantes jusqu'à ce que EditText sur la ligne actuelle contienne une valeur.
Je dois faire l'une des deux choses suivantes, dans cet ordre de préférence:
- Lorsqu'un bouton est cliqué, supprimez immédiatement le focus sans définir le focus sur un bouton différent
- Mettre le focus sur le premier bouton lorsque l'activité commence
Le problème se manifeste après le retour de la sous-activité; le bouton sur lequel vous avez cliqué conserve le focus.
Re: # 1 ci-dessus - Il ne semble pas y avoir de removeFocus()
méthode ou quelque chose de similaire
Re: # 2 ci-dessus - Je peux utiliser requestFocus()
pour mettre le focus sur le bouton de la ligne suivante, et cela fonctionne après le retour de la sous-activité, mais pour une raison quelconque, cela ne fonctionne pas dans l'activité parent onCreate()
.
J'ai besoin de cohérence de l'interface utilisateur dans les deux sens - soit aucun bouton n'a le focus une fois la sous-activité terminée, soit chaque bouton reçoit le focus en fonction de sa place dans le flux logique, y compris le tout premier (et seul) bouton actif avant toute sélection.