android - FragmentPagerAdapter 的 getItem() 中的 switch 语句如何工作?

标签 android android-viewpager

看看这段代码:

@Override
    public Fragment getItem(int index){

       Log.i("Tab position", String.valueOf(index));
        switch (index) {
        case 0:
            // Top Rated fragment activity
            return new TopRatedFragment();
        case 1:
            // Games fragment activity
            return new GamesFragment();
        case 2:
            // Movies fragment activity
            return new MoviesFragment();
        }

        return null;
    }    

       @Override
        public int getCount() {
            // TODO Auto-generated method stub

            return 3;
        }

ViewPager 工作正常,但如何呢?

  1. 当我启动我的应用程序时,我使用 TabPosition 0 和 1 跟踪 Logcat:

    09-16 15:28:20.353: I/Tab 位置 (2737): 0 09-16 15:28:20.372:I/Tab 位置(2737):1

  2. 现在,当我选择第二个选项卡或滑动到第二页时,我会使用 TabPosition 2 关注 Logcat:

    09-16 15:28:29.072:I/Tab 位置(2737):2

  3. 当我选择第三个选项卡或滑动到第三页时,没有 Logcat 和 TabPosition 未打印:

我的困惑是我知道 getItem() 返回的索引不是当前所选页面或选项卡的位置,而是需要呈现的页面的位置。

但如果是这种情况,那么 switch 语句如何返回正确的 fragment ,尽管索引不正确。

例如:

最初getItem()返回两个索引0和1,现在switch语句如何决定选择0或1。

我希望你能理解问题。

最佳答案

它是这样工作的:

当您设置适配器时,ViewPager 将向适配器询问要显示的第一个 fragment (索引 0)和右侧的 fragment (索引 1)。

那是因为 ViewPager 总是缓存当前显示页面之外的一些页面。 “some”的默认值为 1,但您可以使用

更改它

http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)

请注意,0 没有左邻居(索引 -1),因此在开始时仅加载索引 0 和 1。

现在,当您分页到索引 1 时,ViewPager 的缓存中已经有相应的 fragment ,可以立即显示它。但它也会向适配器询问索引 2,因为它将是下一个。

同理,当你翻页到index 2时,它已经有了fragment,可以显示了。由于 2 没有正确的邻居(ViewPager 从您的 getCount 中知道),因此没有更多内容要加载...

编辑:因此,为了更直接地回答您的原始问题:switch 语句永远不必在 0 和 1 之间做出决定。getItem 被调用一次用于 0,一次用于 1,它在每种情况下返回适当的 fragment ,然后返回 ViewPager决定显示其中的哪些。

关于android - FragmentPagerAdapter 的 getItem() 中的 switch 语句如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25866759/

相关文章:

android - 带有 viewpager 和底部按钮的折叠工具栏

java - 使用 ViewPager 在选项卡之间切换时,RecyclerView 一次自动滚动一项

javascript - React Native 在多个同时运行的 Android 模拟器上运行

java - 如何在使用 ViewFlipper 的 showNext() 后更改 ListFragment 的 ListView?

java - 找不到符号方法 OnClickListener android

android - ScrollView 中的 ViewPagerIndicator

android - ViewPager 和 FAB 的正确布局?

android - 如何显示在堆积条形图的顶部

java - 在android中使用JDBC安全吗?

android - ViewPager 内的 ScrollView 不工作