在DialogFragment中从微调器中选择项目时隐藏键盘

时间:2016-05-31 14:25:45

标签: android android-softkeyboard android-dialogfragment dialogfragment

我在从Spinner中选择项目后尝试隐藏键盘,但代码无法正常工作且没有任何反应。但在另一方面,相同的代码在普通片段中起作用。

以下是隐藏键盘的方法:

public static void hideKeypad(Activity activity) {
    View view = activity.getCurrentFocus();
    if (view != null) {
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
}

2 个答案:

答案 0 :(得分:0)

这对我来说是一个片段

    public void removePhoneKeypad() {
    if(getActivity().getCurrentFocus()!=null &&getActivity().getCurrentFocus().getWindowToken() != null) {
        System.out.println("getCurrentFocus() in frag");
        InputMethodManager inputManager = (InputMethodManager) rootView
                .getContext().getSystemService(Context.INPUT_METHOD_SERVICE);

        IBinder binder = getActivity().getCurrentFocus().getWindowToken();
        inputManager.hideSoftInputFromWindow(binder,
                InputMethodManager.HIDE_NOT_ALWAYS);
    }
    getActivity().getWindow().setSoftInputMode(
              WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}

答案 1 :(得分:0)

您需要指定rootView的{​​{1}},因为在您的方法中,它会看到Fragment,因此它永远不会转到代码的其余部分。

这是正确的代码:

getCurrentFocus() == null

创建一个类变量public static void hideKeypad(Activity activity, View view) { if (view != null) { InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } } 并将其与ViewrootView的{​​{1}}相等,并在此Fragment中的任意位置使用此方法。< / p>