Fragment.getActivity().getCurrentFocus = null解决办法
来源:互联网 发布:内蒙古大数据局 编辑:程序博客网 时间:2024/06/05 07:08
需求场景:
FragmentActivity上显示DialogFragment,当关闭FragmentActivity的时候,如果DialogFragment有控件获得焦点并且键盘弹出,希望可以关掉键盘。
网上最多的办法:
InputMethodManager manager = (InputMethodManager) actv.getSystemService(Context.INPUT_METHOD_SERVICE);manager.hideSoftInputFromWindow(actv.getCurrentFocus().getWindowToken(), 0);
因为获得焦点的控件在DialogFragment上,FragmentActivity上没有任何控件获取焦点,所以使用上面方法的时候,会发现抛出了空指针,因为actv.getCurrentFocus()的时候返回了null。
但是如果获取焦点的控件在FragmentActivity上,而不是在DialogFragment上,则上述方法成立。
可以采用如下方法:
@Overridepublic void onPause() { hideSoftInput(((ViewGroup) getView()).getFocusedChild()); super.onPause();}void hideSoftInput(View view) { if (getActivity() == null || view == null) { return; } int times = 0; boolean isClosed = false; InputMethodManager manager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); while (!isClosed && times <= 5) { times++; isClosed = manager.hideSoftInputFromWindow(view.getWindowToken(), 0); }}
可以通过((ViewGroup) getView()).getFocusedChild()这种方法获取DialogFragment的焦点控件,然后调用hideSoftInputFromWindow,为什么这里用了while循环,是担心怕一次关不掉(每次关键盘总觉得好多坑,就多关闭几次),这里还需要设置次数,不能超过五次,免得死循环,导致不能执行后面的语句。
0 0
- Fragment.getActivity().getCurrentFocus = null解决办法
- android fragment getActivity() null
- Fragment getActivity()返回null
- Fragment中调用getActivity为null的解决办法
- fragment来回切换getActivity()==null问题
- Activity被回收导致fragment的getActivity为null的解决办法
- Activity被回收导致fragment的getActivity为null的解决办法
- Activity被回收导致fragment的getActivity为null的解决办法
- Activity被回收导致fragment的getActivity为null的解决办法
- Activity被回收导致fragment的getActivity为null的解决办法
- Activity被回收导致fragment的getActivity为null的解决办法
- Activity被回收导致Fragment的getActivity为null的解决办法
- Android Fragment getActivity返回null解决
- Android Fragment getActivity返回null解决
- Android Fragment getActivity返回null解决
- Fragment中getActivity为null的问题
- 执行Fragment的getActivity()方法返回null
- fragment 中获取getActivity组件null问题。
- c++中vector向量的使用
- SOAP webserivce 和 RESTful webservice 对比及区别
- url传递中文乱码解决
- 个人笔记
- 二叉树--最近公共父节点
- Fragment.getActivity().getCurrentFocus = null解决办法
- 软件工程—Chapter2 计划
- Linux如何查看JDK的安装路径
- Android支付——改进的支付宝支付
- unity 使用UGUI创建图集
- RESTful
- 2016旷视杯清华校赛总结(部分题目解法)
- vim提供多窗口编辑的功能
- Linux多线程编程详解----条件变量pthread_cond_t