Hide keyboard when navigating from a fragment to another

北战南征 提交于 2019-12-20 08:48:14

问题


I have a Fragment that contains an Edit Text. When the Edit Text is pressed, the keyboard is being shown. When pressed the Save button in the upper corner, the application returns to the previous fragment, but the keyboard persists.

I would like the keyboard to be hidden when navigating to the previous fragment.

Please, note that I tried this solution: Close/hide the Android Soft Keyboard.

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

I tried to use this in both fragments, in the onCreate method.

I also tried to hide the soft keyboard in the layout:

android:windowSoftInputMode="stateAlwaysHidden"

None of these worked, unfortunately.

I would have posted some pictures, but I do not have enough reputation yet. I would appreciate any constructive help and opinion and do not forget that "A wise man can learn more from a foolish question than a fool can learn from a wise answer." :)

Regards, Alexandra


回答1:


Put the code that hides the keyboard in your "save button" click listener, and use this method to hide the keyboard:

    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);
         }
     }



回答2:


Kotlin

For Kotlin, you can use this as a top level function, just add the code to a separate class such as 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)
    }
}

To access it from Fragment, call it like:

hideKeyboard(activity as YourActivity)

Thanks to Silvia H for Java code.




回答3:


Easiest way to hide keyboard in fragment or Activity

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);



回答4:


  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);
         }
     }



回答5:


@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);
    }
}


来源:https://stackoverflow.com/questions/26911469/hide-keyboard-when-navigating-from-a-fragment-to-another

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!