26

我将尽可能使问题简短而简单。

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

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

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

4

5 回答 5

32

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

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

View activeView = fragment.getView();

如前所述,除非另有说明,否则 viewPager 将仅包含当前子项和相邻子项(currentItem() +/- 1)setOffscreenPageLimit()

于 2013-05-12T21:27:30.377 回答
6

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

请看mViewPager.setOffscreenPageLimit()

于 2013-05-12T22:08:47.237 回答
3

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

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

于 2013-11-25T07:27:48.607 回答
0

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

我提出的解决方案:

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

(这个问题对于我发布了相同答案的问题来说非常简单)。

于 2014-12-02T14:18:41.810 回答
-1

应该有多少子视图?

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

于 2013-05-12T20:48:48.093 回答