看看这段代码:
@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
工作正常,但如何呢?
当我启动我的应用程序时,我使用 TabPosition 0 和 1 跟踪 Logcat:
09-16 15:28:20.353: I/Tab 位置 (2737): 0 09-16 15:28:20.372:I/Tab 位置(2737):1
现在,当我选择第二个选项卡或滑动到第二页时,我会使用 TabPosition 2 关注 Logcat:
09-16 15:28:29.072:I/Tab 位置(2737):2
当我选择第三个选项卡或滑动到第三页时,没有 Logcat 和 TabPosition 未打印:
我的困惑是我知道 getItem()
返回的索引不是当前所选页面或选项卡的位置,而是需要呈现的页面的位置。
但如果是这种情况,那么 switch 语句如何返回正确的 fragment ,尽管索引不正确。
例如:
最初getItem()
返回两个索引0和1,现在switch语句如何决定选择0或1。
我希望你能理解问题。
最佳答案
它是这样工作的:
当您设置适配器时,ViewPager 将向适配器询问要显示的第一个 fragment (索引 0)和右侧的 fragment (索引 1)。
那是因为 ViewPager 总是缓存当前显示页面之外的一些页面。 “some”的默认值为 1,但您可以使用
更改它请注意,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/