
fragment、FragmentContainerView、NavHostFragment、用户 Fragment 之间的关系fragment的 name 属性用于在布局文件中静态声明一个 Fragment指定该 Fragment 的具体实现类androidx.fragment.app.FragmentContainerView和fragment是容器androidx.fragment.app.FragmentContainerView是fragment的增强版androidx.navigation.fragment.NavHostFragment是一个有特殊导航功能的 Fragment通常被放在前两者里面层级关系FragmentContainerView-NavHostFragment-用户 FragmentFragment 中隐藏软键盘1、具体实现privatevoidhideSoftKeyboard(){InputMethodManagerinputMethodManager(InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);if(inputMethodManager!null)inputMethodManager.hideSoftInputFromWindow(getView().getWindowToken(),0);}2、解读1获取 InputMethodManager 实例InputMethodManagerinputMethodManager(InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);getActivity 是 Fragment 的方法返回该 Fragment 所属的宿主 Activity 在 Fragment 生命周期中只有onAttach 方法执行后到 onDetach 方法执行前getActivity 方法才不返回 null 现代 Android 开发推荐使用 requireActivity 方法它会在 Activity 为 null 时抛出明确异常而非返回 nullgetSystemService 是 Activity 的方法用于获取系统服务 参数 Context.INPUT_METHOD_SERVICE 是常量字符串 input_method标识输入法服务 返回的是 Object 类型需要强制转换为 InputMethodManagerInputMethodManager 是 Android 系统中管理输入法IME的核心类 负责软键盘的显示、隐藏和各种交互 是系统级单例服务不能直接实例化必须通过 getSystemService 获取2空安全检查if(inputMethodManager!null)系统服务理论上不应该为 null但良好的编程习惯应该做防御性检查 如果系统处于异常状态或权限问题可能导致获取服务失败 在 Android 8.0API 26及以上版本getSystemService 方法基本不会返回 null3隐藏软键盘inputMethodManager.hideSoftInputFromWindow(getView().getWindowToken(),0);getView 是 Fragment 的方法返回该 Fragment 的根视图 只有在 onCreateView 方法执行后才会非 null 现代开发推荐使用 requireView 方法替代它会在视图为 null 时抛出明确异常getWindowToken 是 View 的方法返回该视图关联的窗口令牌WindowToken WindowToken 是系统用于识别窗口的唯一标识 软键盘总是关联到某个窗口需要这个令牌来确定操作哪个窗口的键盘hideSoftInputFromWindow 方法参数详解 第 1 个参数窗口令牌告诉系统要隐藏哪个窗口的软键盘 第 2 个参数隐藏标志通常为 0 或以下常量 0默认方式 InputMethodManager.HIDE_IMPLICIT_ONLY只隐藏自动弹出的软键盘 InputMethodManager.HIDE_NOT_ALWAYS非强制隐藏系统可能拒绝