【问题标题】:How do I get the child View of a ViewPager at a given item如何在给定项目处获取 ViewPager 的子视图
【发布时间】:2013-05-12 20:27:27
【问题描述】:

我会尽量让问题简短明了。

View activeView = mViewPager.getChildAt(mViewPager.getCurrentItem());

当前项为 0 和 1 时返回子视图。但如果当前项为 2,则返回 null 。这是为什么呢?

edit:让我重新表述一下自己。如何在任何给定项目位置获取 ViewPager 的子视图?

【问题讨论】:

    标签: android android-viewpager


    【解决方案1】:

    事实证明getChildAt(int) 不是正确的方法。我所做的是检索 ViewPager 中使用的适配器并从那里找到我的视图:

    adapter = mViewPager.getAdapter();
    Fragment fragment = adapter.getItem(mViewPager.getCurrentItem());
    
    View activeView = fragment.getView();
    

    如前所述,除非通过setOffscreenPageLimit() 另行指定,否则 viewPager 将仅包含当前子项和相邻子项(currentItem() +/- 1)

    【讨论】:

    • 只是提醒现在进来的任何人,getItem 不再是 pagerAdapter 上的方法
    • @Ronnie Troj 我在 activeView 中得到 null 原因
    • 收到带有以下代码的非法状态异常:“Fragment MyFragment 未附加到 Activity”。
    • @Erum 调用 adapter.instantiateItem(mViewPager, mViewPager.getCurrentItem());而不是 getItem
    【解决方案2】:

    您的视图寻呼机适配器最多可容纳 2 个页面,即 2 个视图/片段,其余的将被回收。在其他情况下,您没有提到的是您可能在 ViewPager 中有 2 个页面/视图。

    请看mViewPager.setOffscreenPageLimit()

    【讨论】:

      【解决方案3】:

      将标签添加到 Viewpager 返回视图。

      以下链接将为您提供帮助: https://stackoverflow.com/a/20186828/1271891

      【讨论】:

      • 不错的一个。看起来正是为了动态填充视图。谢谢!!
      【解决方案4】:

      在我努力寻找装饰 android 视图的方法期间,我想我为我在my blog 中记录的 OP 问题定义了替代解决方案。我正在链接到它,因为代码似乎有点太多,无法在此处包含所有内容。

      我提出的解决方案:

      • 保持适配器和视图完全分离
      • 可以轻松地从视图寻呼机查询具有任何索引的视图,如果当前未加载此视图或相应的视图,他将返回null

      (这个问题对this one很简单,我在里面发了the same answer)。

      【讨论】:

        【解决方案5】:

        应该有多少子视图?

        ViewPager 也不会同时加载所有子项。只有它显示的一个和下一个。您可以使用mViewPager.setOffscreenPageLimit(),例如 3 或 4,将更多项目“预加载”到 viewpager。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多