做项目的时候遇到一个bug,在一个Activity中打开DrawerLayout,这样就会遇到一个问题,在Activity中的EditText的焦点还在,这样根据项目中的代码逻辑数据就会同步不过来,这样展示就会有问题,所以打算总结一下。

Android新启动Activity,dialog或者其他窗体中中包含EditText, 新启动的activity的焦点默认在EditText上,这是android系统会弹出软键盘,挤压activity本来的界面,影响美观。

因此最好在新窗体创建时,最好在onCreate()方法中将焦点放在另一个view上. view使用requestFocus()焦点,但是如果让button或者textView之类控件直接使用requestFocus()方法,则无法获取焦点,焦点会依然在editText上。

只能在使用View的requestFocus()方法之前调用下面2个方法,view才可获取焦点:

view.setFocusable(true);

view.setFocusableInTouchMode(true);

然后调用 requestFocus(),requestFocusFromTouch()即可获取焦点。

项目中的操作

b7a8aca66e2c

这个是项目中的本来的逻辑

b7a8aca66e2c

项目中的抽屉回调

最后解决方法

在抽屉滑动的时候让抽屉获得焦点,这样原Activity的焦点消失,更新List的Data,然后抽屉里面在取最新的ListData,达到更新的目的。。。。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐