Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dismiss Keyboard on button click that close fragment

How do I close the keyboard on button click? I have a fragment which has an EditText and two buttons. One submits the EditText content, the other simply closes the fragment. Now when the fragment is gone, the keyboard stays. However, pressing the back button closes the keyboard or clicking on "done" also closes it. But what I need is the keyboard disappear when the fragment is closed.

I've tried solutions on similar questions here,here or here but none seems to work. Most of them throw a NullPointerException. All are for activities not fragments. The code for calling the keyboard works:

editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

However I had to add getActivity() to make it work.

Any help will be appreciated.

like image 990
esQmo_ Avatar asked Mar 28 '17 05:03

esQmo_


2 Answers

Use this method

public void hideKeyboard() {
    // Check if no view has focus:
    View view = getActivity().getCurrentFocus();
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}
like image 162
sreejith v s Avatar answered Oct 14 '22 02:10

sreejith v s


for a fragment use the following function

  public static void hideKeyboard(Activity activity) {
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    //Find the currently focused view, so we can grab the correct window token from it.
    View view = activity.getCurrentFocus();
    //If no view currently has focus, create a new one, just so we can grab a window token from it
    if (view == null) {
        view = new View(activity);
    }
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

call it when the button is clicked

  btn_cancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            hideKeyboard(getActivity());
        }
    });
like image 45
Vipin Singh Avatar answered Oct 14 '22 01:10

Vipin Singh