Fragment.getActivity().getCurrentFocus = null解决办法
2016-05-24 17:55
260 查看
需求场景:
FragmentActivity上显示DialogFragment,当关闭FragmentActivity的时候,如果DialogFragment有控件获得焦点并且键盘弹出,希望可以关掉键盘。
网上最多的办法:
因为获得焦点的控件在DialogFragment上,FragmentActivity上没有任何控件获取焦点,所以使用上面方法的时候,会发现抛出了空指针,因为actv.getCurrentFocus()的时候返回了null。
但是如果获取焦点的控件在FragmentActivity上,而不是在DialogFragment上,则上述方法成立。
可以采用如下方法:
可以通过((ViewGroup) getView()).getFocusedChild()这种方法获取DialogFragment的焦点控件,然后调用hideSoftInputFromWindow,为什么这里用了while循环,是担心怕一次关不掉(每次关键盘总觉得好多坑,就多关闭几次),这里还需要设置次数,不能超过五次,免得死循环,导致不能执行后面的语句。
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上,则上述方法成立。
可以采用如下方法:
@Override public 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循环,是担心怕一次关不掉(每次关键盘总觉得好多坑,就多关闭几次),这里还需要设置次数,不能超过五次,免得死循环,导致不能执行后面的语句。
相关文章推荐
- js/jquery获取文本框输入焦点的方法
- 火狐下input焦点无法重复获取问题的解决方法
- Android Fragment 基本了解(图文介绍)
- Android程序开发之Fragment实现底部导航栏实例代码
- Android应用开发中Fragment与Activity间通信示例讲解
- Android的Fragment的生命周期各状态和回调函数使用
- 浅谈Android App开发中Fragment的创建与生命周期
- 实例探究Android开发中Fragment状态的保存与恢复方法
- Android Fragment的使用方法(翻译)
- 实例探究Android应用编写时Fragment的生命周期问题
- Android App开发中创建Fragment组件的教程
- Android中的Fragment类使用进阶
- 使用Fragment来处理Andoird app的UI布局的实例分享
- Android App中使用ListFragment的实例教程
- Android中Fragment子类及其PreferenceFragment的创建过程演示
- Android应用开发中Fragment间通信的实现教程
- Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果
- Android 中 Fragment的使用大全
- Android基于ViewPager Fragment实现选项卡
- Android中Fragment与Activity的生命周期对比