android getCurrentFocus().getWindowToken()报空指针

转载简书,地址:https://www.jianshu.com/p/3f2b0ad3565b

错误描述

写了一个关闭软件盘的方法,结果在android9,android10上面都报NullPointerException异常;然后拿了一个android6的手机不报错,感觉有点坑,然后百度看见了简主写的逻辑,发现了还是写的不够严谨啊,里面还需要多加几层非空判断。

参考代码

/**
     * 隐藏软键盘,要防止报空指针
     */
    public static void hintKeyBoard(Activity activity) {
        //拿到InputMethodManager
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        //如果window上view获取焦点 && view不为空
        if (imm.isActive() && activity.getCurrentFocus() != null) {
            //拿到view的token 不为空
            if (activity.getCurrentFocus().getWindowToken() != null) {
                //表示软键盘窗口总是隐藏,除非开始时以SHOW_FORCED显示。
                imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
            }
        }
    }

说明:
getCurrentFocus()是拿到已经获得焦点的view
getCurrentFocus().getWindowToken()是拿到window上的token

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值