Je commence par un par programme créé AutoCompleteTextView
voir sur ma mise en page. Après que l'utilisateur a tapé des données valides dans le champ, je crée un nouvel objet AutoCompleteTextView
juste sous le premier, de la même manière, avec les mêmes paramètres. Je stocker toutes les références sur le terrain dans un ArrayList
pour suivre le dernier, de cette façon que je me assure qu'il y aura de nouveaux champs que sous celui au fond (essentiellement le dernier élément de la liste de référence) - Alors ça continue sur tous les terrains.Android AutoCompleteTextView - gérer l'option dynamique IME modifier en "re-sélection" vue
Je voudrais ajouter cette fonctionnalité: lorsqu'un nouveau champ est créé, je change la dernière des options de terrain à ÉMI EditorInfo.IME_ACTION_NEXT
et nextFocusForward
attribut au champ fraîchement créé - également par programmation. Ce que je veux réaliser: juste quand l'utilisateur appuie sur Entrée sur le clavier, la focalisation du dernier champ saute au nouveau champ. J'utilise ce code pour définir de nouvelles options IME:
ArrayList<AutoCompleteTextView> fields = new ArrayList<>();
//Creating freshlyCreatedField, IT'S STILL NOT IN THE fields LIST!
AutoCompleteTextView currentlySelectedField = fields.get(fields.size() - 1); // last element
currentlySelectedField.setImeOptions(EditorInfo.IME_ACTION_NEXT);
currentlySelectedField.setNextFocusForwardId(freshlyCreatedField.getId());
currentlySelectedField.setSingleLine(true); //ACTV needs it to get IME to work
//Adding freshlyCreatedField to the fields list,
//so next time it will be the currentlySelectedField
Mais après l'exécution de ce code ne passe à l'objet AutoCompleteTextView
actuellement sélectionné. Effacer et demander la mise au point ne fonctionnait pas, et le faire fonctionner de manière inversée (créer un champ "invisible" (techniquement GONE
) à chaque fois) serait beaucoup plus douloureux.
Encore une chose: après avoir sélectionné un autre champ et re-sélectionner celui avec les changements de configuration le bouton Entrée fonctionne comme il se doit pour la première fois! Si je pouvais faire la même chose par programme, cela résoudrait mon problème ... alors, des idées pour le faire? (Bien sûr, je me réjouis également de meilleures solutions ...;))