web-dev-qa-db-fra.com

Masquer le clavier lors de la navigation d'un fragment à un autre

J'ai un fragment qui contient un texte d'édition. Lorsque vous appuyez sur Modifier le texte, le clavier s'affiche. Lorsque vous appuyez sur le bouton Enregistrer dans le coin supérieur, l'application revient au fragment précédent, mais le clavier persiste.

J'aimerais que le clavier soit caché lors de la navigation vers le fragment précédent.

Veuillez noter que j'ai essayé cette solution: Fermer/masquer le Android Soft Keyboard .

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myView.getWindowToken(), 0);

J'ai essayé d'utiliser ceci dans les deux fragments, dans la méthode onCreate.

J'ai également essayé de masquer le clavier virtuel dans la disposition:

Android:windowSoftInputMode="stateAlwaysHidden"

Malheureusement, rien de tout cela n'a fonctionné.

J'aurais posté quelques photos, mais je n'ai pas encore assez de réputation. J'apprécierais toute aide et opinion constructives et n'oublie pas que "Un homme sage peut apprendre plus d'une question stupide qu'un imbécile peut apprendre d'une réponse sage." :)

Cordialement, Alexandra

31
Alexandra Alstanei

Mettez le code qui cache le clavier dans votre écouteur de clic "bouton Enregistrer" et utilisez cette méthode pour masquer le clavier:

    public static void hideKeyboard(Activity activity) {
        InputMethodManager inputManager = (InputMethodManager) activity
        .getSystemService(Context.INPUT_METHOD_SERVICE);

        // check if no view has focus:
         View currentFocusedView = activity.getCurrentFocus();
         if (currentFocusedView != null) {
             inputManager.hideSoftInputFromWindow(currentFocusedView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
         }
     }
84
Silvia H

Moyen le plus simple de masquer le clavier dans un fragment ou une activité

Soluton: 1

//hide keyboard
public static void hideKeyboard(Context ctx) {
    InputMethodManager inputManager = (InputMethodManager) ctx
            .getSystemService(Context.INPUT_METHOD_SERVICE);

    // check if no view has focus:
    View v = ((Activity) ctx).getCurrentFocus();
    if (v == null)
        return;

    inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}

Solution: 2

    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
2
chand becse

Kotlin

Pour Kotlin, vous pouvez l'utiliser comme fonction de niveau supérieur, ajoutez simplement le code à une classe distincte telle que Utils.kt.

fun hideKeyboard(activity: Activity) {
    val inputMethodManager =
        activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

    // Check if no view has focus
    val currentFocusedView = activity.currentFocus
    currentFocusedView?.let {
        inputMethodManager.hideSoftInputFromWindow(
            currentFocusedView.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
    }
}

Pour y accéder à partir de Fragment, appelez-le comme:

hideKeyboard(activity as YourActivity)

Merci à Silvia H pour Java code.

1
Yogesh Umesh Vaity
@Override
    public void onDestroyView() {
        super.onDestroyView();
        View view = getActivity().getCurrentFocus();
        if (view != null) {
            InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
}
0
M.Namjo
  public void hideKeyboard(Activity activity) {
        InputMethodManager inputManager = (InputMethodManager) activity
        .getSystemService(Context.INPUT_METHOD_SERVICE);

        // check if no view has focus:
         View currentFocusedView = activity.getCurrentFocus();
         if (currentFocusedView != null) {
             inputManager.hideSoftInputFromWindow(currentFocusedView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
         }
     }
0