我有一个有四个选项卡的应用程序,每个选项卡都有一些编辑文本,其中一些需要填充才能执行数据库操作,因此当用户按下“保存更改”按钮时,一种方法检查这些编辑文本和应该将您的注意力集中在第一个为空的地方,这工作正常但有一个问题:如果编辑文本在另一个选项卡中,requestFocus();
将不会更改选项卡。
然后我尝试使用 ViewPager.setCurrentItem(int)
更改 requestFocus();
之前的选项卡,但我无法弄清楚的是:
如何获取编辑文本的标签?
最佳答案
ViewPager
类没有用于此的方法。
一个非常 hacky 的解决方案可能是(假设您正在使用 FragmentStatePagerAdapter
):
在
EditText
上调用getParent()
所需的次数以获得父 Fragment。所以,如果你有这样的结构: Fragment --> LinearLayout --> EditText 你应该调用getParent()
两次。然后将ViewParent
转换为Fragment
。实际上,您可以使用while
循环进行循环,直到找到作为Fragment
实例的 循环浏览您的适配器 fragment
for ( int i = 0; i < adapter.getCount(); i++) { if (adapter.getItem(i) == parentTakenBefore) { viewPager.setCurrentItem(i); break; } }
并检查当前项目是否是你的页面
ViewParent
这与其说是真正的解决方案,不如说是一种 hack,但应该可行
希望对你有帮助
更新
添加了通过 parent 循环的代码
boolean isFragment = false;
Fragment fragment = null;
ViewParent currentParent = v.getParent();
while(!isFragment && currentParent != null){
if (currentParent instanceof Fragment) {
fragment = (Fragment) currentParent();
isFragment = true;
}
else {
currentParent = currentParent.getParent();
}
}
关于android - 如何在 View 寻呼机中获取父选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38219230/