如何获取给定项目的ViewPager的子视图

时间:2013-05-12 20:27:28

标签: android android-viewpager

我会尽可能简短而简单地保持这个问题。

View activeView = mViewPager.getChildAt(mViewPager.getCurrentItem());
当前项为0和1时,

返回子视图。但如果当前项为2,则返回null。那是为什么?

编辑:让我重温一下自己。如何在任何给定项目位置获取ViewPager的子视图?

5 个答案:

答案 0 :(得分:29)

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

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

View activeView = fragment.getView();

如前所述,除非通过setOffscreenPageLimit()

指定,否则viewPager将仅包含当前子项和相邻子项(currentItem()+/- 1)

答案 1 :(得分:5)

您的查看寻呼机适配器最多可容纳2页,即2个视图/片段,其余部分都可以回收。在其他情况下,您未提及的是ViewPager中可能有2个页面/视图。

请查看mViewPager.setOffscreenPageLimit()

答案 2 :(得分:3)

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

以下链接可以帮助您: https://stackoverflow.com/a/20186828/1271891

答案 3 :(得分:0)

在我努力寻找装饰机器人视图的方法时,我认为我已经为my blog中记录的OP问题定义了替代解决方案。我正在链接到它,因为代码似乎有点过多,无法包含所有内容。

我建议的解决方案:

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

(这个问题非常简单this one我发布了the same answer}。

答案 4 :(得分:-1)

应该有多少儿童观点?

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