ViewPager中嵌套Fragment中的EditText设置requestFocus无法获取焦点的解决方法
2017-08-04 11:22
471 查看
最近开发任务中遇到一个问题,登录注册页面是放在一个页面中可以切换的,所以很自然想到了用TabLayout+ViewPager+Fragment实现,在登录页面有一个逻辑是,如果用户之前登录过,则获取之前登录的账号,设置到账号输入框,然后让密码输入框获取焦点弹出键盘。
但是按照这样的逻辑写完之后,发现每次执行了密码输入框执行了requestFocus方法,但是无法获取焦点。焦点默认还是在账号框。
这里给出解决方法:
原因:
查资料分析了一下,可能是以下问题:
Android加载刷新UI的时候,是从左到右,从上到下的顺序,正在加载的过程中,如果此时requestFocus(),的话,有可能此时还没把整个界面刷新好,导致requestFocus无效。
解决办法
延迟几毫秒再获取焦点
用RxJava定时方法:
用普通的方法延迟方法:
这样就解决了这个问题了!恭喜!可以开心的休周末了!
这里在进行一个扩展知识
有时候我们需要设置一些布局的属性
通常我们在Fragment中引用到布局文件中一个EditText组件后会出现无法编辑,点击没反应,这时候应该在布局文件中设置属性:descendantFocusability 它有三个属性值。
(1) beforeDescendants:viewgroup会优先其子类控件而获取到焦点
(2) afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
(3) blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
在根控件xml布局文件加 Android:descendantFocusability=”” 加入前两种一个即可解决问题。
但是按照这样的逻辑写完之后,发现每次执行了密码输入框执行了requestFocus方法,但是无法获取焦点。焦点默认还是在账号框。
这里给出解决方法:
原因:
查资料分析了一下,可能是以下问题:
Android加载刷新UI的时候,是从左到右,从上到下的顺序,正在加载的过程中,如果此时requestFocus(),的话,有可能此时还没把整个界面刷新好,导致requestFocus无效。
解决办法
延迟几毫秒再获取焦点
用RxJava定时方法:
Observable.timer(200, TimeUnit.MILLISECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Long>() { @Override public void call(Long aLong) { mEtPassword.requestFocus();//密码框获取焦点 } });
用普通的方法延迟方法:
mEtPassword.postDelayed(new Runnable() { @Override public void run() { mPassWord.requestFocus(); } }, 200);
这样就解决了这个问题了!恭喜!可以开心的休周末了!
这里在进行一个扩展知识
有时候我们需要设置一些布局的属性
通常我们在Fragment中引用到布局文件中一个EditText组件后会出现无法编辑,点击没反应,这时候应该在布局文件中设置属性:descendantFocusability 它有三个属性值。
(1) beforeDescendants:viewgroup会优先其子类控件而获取到焦点
(2) afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
(3) blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
在根控件xml布局文件加 Android:descendantFocusability=”” 加入前两种一个即可解决问题。
相关文章推荐
- EditText和ScrollView共存,无法获取焦点,不能滚动的解决方法
- scrollview 中嵌套 edittext edit无法获取焦点的解决办法
- 当EditText被视图(按钮等)挡住无法获取焦点的解决方法
- 解决基于SlidingMenu的fragment切换后edittext无法获取焦点的问题
- 默认EditTextView不自动获取焦点的方法
- ListView里面有EditTextView,解决弹出键盘后EditView不能获取焦点的问题
- ListView里面有EditTextView,解决弹出键盘后EditView不能获取焦点的问题
- 默认EditTextView不自动获取焦点的方法
- ViewPager中嵌套Fragment,切换之后出现空白页没有加载数据的解决方法
- Android RecyclerView Edittext issue 解决RecyclerView中editext获取焦点紊乱现象
- ViewPager中的EditText设置监听器就会出错的解决办法
- Silverlight 4里Textbox在失去焦点之前无法获取到Text值的另类解决方法
- fragment中如果有fragment嵌套viewpager,每次点击刷新及懒加载的解决方法
- EditTextt如何设置获取焦点后,光标在末尾的解决办法
- HorizontalScrollView中嵌套ViewPager时,ViewPager无法滑动的问题解决方法
- viewpager导致的fragment嵌套不触发onActivityResult方法不触发解决方式
- ViewPager相互嵌套,里层ViewPager无法滑动的解决方法
- FragmentPagerAdapter的getItem()方法无法获取Fragment的解决方法
- EditText默认无法获取焦点,必须点击一次才能获取焦点打开软键盘的解决办法
- textView.setCompoundDrawablesWithIntrinsicBounds(icon, 0, 0, 0)方法无法获取设置系统应用图标的问题