gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:40:16 24 4
gpt4 key购买 nike

看看这段代码:

@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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com