J'essaie de configurer un système pour valider l'entrée de l'utilisateur, dans ce cas, il suffit de vérifier qu'il y a quelque chose entré par l'utilisateur.Conserver le focus sur Edittext dans le port d'écoute OnFocusChanged
J'ai un Utility class
qui vérifie que le EditText
a des données.
J'utilise un OnFocusChangeListener
qui appelle ensuite la méthode du Utility class
.
C'est le code de l'activity
:
editText = (EditText) view.findViewById(R.id.editText);
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
if (Utility.checkInput(editText) == false) {
Toast.makeText(getActivity(), "Enter value!",
Toast.LENGTH_SHORT).show();
// TODO....
// Retain focus - do not allow user to move on.
// This is where I am lost...
}
}
}
});
Ceci est le code de l'Utility class
:
public class Utility {
public static boolean checkInput(EditText editText) {
if (editText.getText().length() != 0) {
return true;
}
return false;
}
//.../
Là où je suis perplexe est de savoir comment conserver le focus si l'entrée de contrôle renvoie false. Je veux empêcher l'utilisateur d'avancer. Je suis sûr qu'il existe une solution simple, mais je ne l'ai pas trouvée. Je me demande également si le
xml
ime.Options
affectera ceci.
Merci.
EDIT
Ceci est mon xml:
<EditText
android:imeOptions="actionDone"
android:inputType="textPersonName"
android:maxLength="24"/>
<spinner ../
<EditText
android:imeOptions="actionDone"
android:inputType="phone"
android:maxLength="12"/>
Quand j'utilise:
if (!hasFocus) {
if (Utility.checkInput(name) == false) {
Toast.makeText(AddDriverUserActivity.this, "Enter value!",Toast.LENGTH_SHORT).show();
name.requestFocus();
}
}
Le problème est, je me sers de l'action fait (pour cacher la clavier), comme l'utilisateur sélectionne ensuite à partir d'un fileur puis passe à la suivante EditText
. Ainsi, le pain ne montre pas jusqu'à ce que je touche le prochain texte d'édition (téléphone) et l'accent est ensuite mis sur deux textes d'édition:
Quand je remis à zéro:
android:imeOptions="actionDone"
à actionNext
il montre le toast, puis passe à l'édition suivante, comme indiqué dans la capture d'écran, les deux sont concentrés.
Request focus
ne l'empêche pas de se déplacer à partir du edittext.
Je vais mettre en œuvre un vérificateur lorsque je soumets tous les domaines, mais il doit y avoir un moyen de le faire étape sage .... hm –