You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决ViewPager内Fragment隐藏软键盘时华为Mate20 Pro返回view为null问题

全机型兼容的Fragment内隐藏软键盘方案

问题根因

部分国产ROM(包括华为EMUI、小米MIUI等)在ViewPager切换Fragment的过程中,会主动清除当前页面的焦点,导致getActivity().getCurrentFocus()返回null,原有逻辑无法拿到WindowToken执行隐藏操作。

兼容修改方案

不要依赖当前焦点View获取WindowToken,改为使用Fragment根布局/Activity顶层DecorView的WindowToken,兜底逻辑补充软键盘服务非空校验,兼容代码如下:

// 先获取输入法服务实例,空校验避免崩溃
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm == null) {
    return;
}

// 优先拿Fragment自身根布局的WindowToken,只要Fragment完成布局就不会为null
View fragmentRoot = getView();
if (fragmentRoot != null) {
    imm.hideSoftInputFromWindow(fragmentRoot.getWindowToken(), 0);
    return;
}

// 兜底逻辑:拿Activity顶层DecorView的Token,绝对不会为空
View decorView = getActivity().getWindow().getDecorView();
imm.hideSoftInputFromWindow(decorView.getWindowToken(), 0);

特殊场景适配

如果是在ViewPager的onPageSelected切换回调里执行隐藏逻辑,部分机型因为切换动画未完成会出现隐藏失效的问题,可以加100~200ms的延迟执行:

new Handler(Looper.getMainLooper()).postDelayed(() -> {
    // 上述隐藏软键盘逻辑放在此处执行
}, 150);

内容的提问来源于stack exchange,提问作者Nao Kreuzeder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:06:08