android - 在android中切换标签时隐藏键盘

标签 android android-fragments android-softkeyboard android-tabs

我已经创建了带有自定义类的选项卡条,并且在每个选项卡中显示了一个 fragment 。当键盘打开并且我切换到选项卡时,第二个 fragment 被调用但键盘没有隐藏。

我在两个 fragment 的 onCreateView() 中使用下面的代码,但它不起作用:

//To Hide Soft 
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

最佳答案

onCreateView() 中使用该代码的问题是,只要在父 fragment/Activity 中创建选项卡,就会创建在选项卡中初始化的 fragment 。我对选项卡内 fragment 的行为进行了一些调查,并意识到您在覆盖许多生命周期方法(例如 onViewCreated()onResume())时会遇到同样的问题,等

我发现解决此问题的最佳方法是在要隐藏键盘的 fragment 中重写 setUserVisibleHint(boolean isVisibleToUser)。只要 fragment 的可见性发生变化,就会调用此方法。

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            try {
                InputMethodManager mImm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                mImm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
                mImm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
            } catch (Exception e) {
                Log.e(TAG, "setUserVisibleHint: ", e);
            }
        }
    }

关于android - 在android中切换标签时隐藏键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28358881/

相关文章:

android - 如何从 SharedPreferences 中的 Fragment 类保存对象数组列表

java - 安卓.view.InflateException : Binary XML file line #10: Error inflating class fragment

如果类型为文本,带有 Enterkeyhint 的 HTML 移动网络输入不会关注下一个输入

android - 如何在跨平台(Windows、iOS、Android)C++ 应用程序中表示字符串?

java - 带有 ListView 异步任务的多下载器

android - 在移动设备中屏幕从纵向 View 旋转到横向 View 时如何停止内容移动?

Android EditText,软键盘显示/隐藏事件?

android - 默认情况下如何以符号模式显示Android键盘?

android - 单击按钮更改 TextView 文本 (Android)

android - Android Studio 中应用级 gradle 文件中 "postprocessing" block 内的 'release' block 是什么?