知识点笔记

来源:互联网 发布:乐视tv网络电视 投影 编辑:程序博客网 时间:2024/05/18 17:41

  • Null的类型转换
  • 输入法的弹出和关闭

Null的类型转换

static class Sample{}public static void main(String[] args){    Sample obj1 = null;    System.out.println((obj1 instanceof Sample)+","+(Sample)obj1);//false,null    Sample obj2 = new Sample();    System.out.println((obj2 instanceof Sample)+","+(Sample)obj2);//true,obj2.hashCode()}

结论:null可以转换为任意类型,但是instanceof返回false

输入法的弹出和关闭

对于一般情况而言,以下代码就够用了

    //弹出输入法    public static void showKeyboard(View v) {        try {            InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);            imm.showSoftInput(v, 0/*InputMethodManager.SHOW_FORCED*/);        } catch (Throwable e) {        }    }    //关闭输入法    public static void hideKeyboard(View v) {        try {            InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);            if (imm.isActive()) {                imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);            }        } catch (Throwable e) {        }    }

但是有时候我们可能在关闭输入法时发现上述方法无效,这种情况在dialog包含的输入框表现的情况更多,我们监听到了dialog dismiss的事件,但是dismiss后输入法依然好好的躺那里无感。。
这时候需要关注下调用hideKeyboard的时机,请注意需要在dialog真正dismiss之前调用此方法,因为一旦window关闭,则调用hideSoftInputFromWindow时无法获取正确的windowToken,因为对应的window已经不存在了,所以系统无法正确关闭输入法,这时候需要在关闭窗体触发时(比如关闭某个关闭按钮),调用此方法完成关闭,这是其中一种可能,值得尝试;

原创粉丝点击