android - 如何在 View 寻呼机中获取父选项卡

标签 android android-viewpager

我有一个有四个选项卡的应用程序,每个选项卡都有一些编辑文本,其中一些需要填充才能执行数据库操作,因此当用户按下“保存更改”按钮时,一种方法检查这些编辑文本和应该将您的注意力集中在第一个为空的地方,这工作正常但有一个问题:如果编辑文本在另一个选项卡中,requestFocus(); 将不会更改选项卡。

然后我尝试使用 ViewPager.setCurrentItem(int) 更改 requestFocus(); 之前的选项卡,但我无法弄清楚的是:

如何获取编辑文本的标签?

最佳答案

ViewPager 类没有用于此的方法。

一个非常 hacky 的解决方案可能是(假设您正在使用 FragmentStatePagerAdapter):

  • EditText 上调用 getParent() 所需的次数以获得父 Fragment。所以,如果你有这样的结构: Fragment --> LinearLayout --> EditText 你应该调用 getParent() 两次。然后将 ViewParent 转换为 Fragment。实际上,您可以使用 while 循环进行循环,直到找到作为 Fragment

  • 实例的 ViewParent
  • 循环浏览您的适配器 fragment

    for ( int i = 0; i < adapter.getCount(); i++) {
        if (adapter.getItem(i) == parentTakenBefore) {
            viewPager.setCurrentItem(i);
            break;
        }
    }
    

    并检查当前项目是否是你的页面

这与其说是真正的解决方案,不如说是一种 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/

相关文章:

android - 使用cordova在android中添加google plus

Android:Camera Crop intent Lollipop 及以上给出 toast 消息,因为此图像不支持编辑

android - Child 的 OnClickListener 防止 Android ViewPager 滑动

android - 与 ViewPager 一起使用时,ImageView 未检测到点击

android - 如何暂停和继续收听来自 CvCameraViewListener2 的帧

android - 无法执行dex : Multiple dex files define Lorg/simpleframework/xml/Attribute

android - TitlePageIndicator 标题变得不同于 PagerAdapter.getPageTitle(int)

android - 从其他 fragment 返回时, fragment 中的 Viewpager 未显示(恢复)

android - 非法状态异常 : database already closed (using ViewPager)

android - 如何在android中更改holder对象的 View