Android EditText actionNext不';不能在碎片中工作
我有一个片段包含Android EditText actionNext不';不能在碎片中工作,android,android-fragments,android-edittext,focus,Android,Android Fragments,Android Edittext,Focus,我有一个片段包含5个编辑文本,前四个有actionNext最后一个有actionDone。我有一个问题,当我在第4个EditText并在软键盘中按next时,它会从第4个EditText中移除焦点,然后焦点消失,键盘仍然可见。当我按下键盘上的“下一步”按钮时,焦点转到第五个编辑文本,然后一切都正常进行 问题 当我在第4次编辑文本时,我必须按键盘上的actionNext2次才能到达第5次编辑文本 环境 我正在使用AppCompatActivity,Support fragments,EditTex
5个编辑文本
,前四个有actionNext
最后一个有actionDone
。我有一个问题,当我在第4个EditText并在软键盘中按next时,它会从第4个EditText中移除焦点,然后焦点消失,键盘仍然可见。当我按下键盘上的“下一步”按钮时,焦点转到第五个编辑文本,然后一切都正常进行
问题
当我在第4次编辑文本时,我必须按键盘上的actionNext2次才能到达第5次编辑文本
环境
我正在使用AppCompatActivity,Support fragments,EditText在android.Support.design.widget.TextInputLayout中,我使用AndroidAnnotations。现在我找到了这个奇怪问题的解决方案,我发布它是为了帮助有同样问题的人或找到更好的建议:)
我的问题与碎片有关
我有一个活动,有两个片段。加载活动时,它会打开第一个带有replace事务的片段
mTransaction.replace(R.id.。
第一个片段有2个EditText。当用户单击第一个片段中的按钮时,活动将打开第二个片段,其中包含发生错误的5个EditText。这是我执行第二个片段事务的方式:
mTransaction.add(R.id...
mTransaction.addToBackStack(null);
mTransaction.commit();
这就是问题所在,因为当提交第二个片段时,我对片段事务使用add
,这使得第一个片段留在容器中,所以这导致了我的bug
在我看来,第一个片段的EditText就在那里,它获得了关注,尽管在第二个片段中,我使用了android:nextFocusDown=“@+id/…”
(因为我知道EditText第四和第五个片段有问题),但它不起作用
解决方案
在我的案例中,解决方案非常简单,我必须像这样进行第二个片段事务:
mTransaction.replace(R.id...
mTransaction.addToBackStack(null);
mTransaction.commit();
如果有人有更好的建议,我们欢迎
第二个解决方案(2018年):
为此
我解决了这个问题,为片段布局的父视图组创建了一个自定义类
focusSearch(聚焦:视图?,方向:Int)
添加此逻辑:
override fun focusSearch(focused: View?, direction: Int): View? {
val focusSearch = super.focusSearch(focused, direction)
if (direction == View.FOCUS_DOWN) when (focused?.id) {
R.id.some_view_that_has_focus -> return new_view_focus
}
if (findViewById<View>(focusSearch.id) == null) {//the view found is not part of this parent return null
return null
}
return focusSearch
}
override-fun-focusSearch(聚焦:视图?,方向:Int):视图{
val focusSearch=超级聚焦搜索(聚焦,方向)
如果(方向==视图.聚焦\向下)当(聚焦?.id){
R.id.some\u view\u拥有\u焦点->返回新的\u view\u焦点
}
如果(findviewbyd(focusSearch.id)==null){//找到的视图不是此父视图的一部分,则返回null
返回空
}
返回焦点搜索
}
当新的焦点视图不是父视图的一部分时,返回null。当无法访问其他视图焦点时,我在When
案例中手动管理它