我正在使用此行显示当前片段:
Item myFragment = (Item) getSupportFragmentManager().findFragmentById(R.id.pager);
以下是我的ViewPager
的示例| A | B | C | D | E | F |
显示的第一个片段是A,但myFragment是B. 当我去B时,myFragment = B. ... 当我去F时,myFragment = E. 你可以在这里看到代码: - > TabsActivity.java
有人已经遇到这个问题吗? 为什么显示的片段和myFragment的值之间存在转换?
由于
[编辑] 我添加一个Log() 现在这是我的TabsActivity的一部分
class TabsAdapter extends FragmentStatePagerAdapter {
public TabsAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Log.e("POSITION", position + "");
return Item.newInstance(CONTENT.get(position % CONTENT.size()));
}
@Override
public CharSequence getPageTitle(int position) {
return CONTENT.get(position % CONTENT.size());
}
@Override
public int getCount() {
return CONTENT.size();
}
}
当我启动我的应用程序时,我的记录器显示: 位置0 位置1
这是正常的吗?它不应该只显示“POSITION 0”吗? 当我滑动时,“POSITION 1”?
答案 0 :(得分:4)
首先,您要根据ID询问片段。 ID R.id.pager
只是一个与R.id.pager
无关的随机数。在提供的代码中,您不会为任何碎片分配ID,因此您获得任何东西的事实都是幸运的。
如果您想从Viewpager中检索片段,则需要遵循此问题中回答的条件:Update data in ListFragment as part of ViewPager
其次,您获得“POSITION 0 POSITION 1”的原因是因为ViewPager
检索当前页面以及其附近尚未拥有的任何其他页面。这意味着它在当前页面,上一页面和下一页面上调用getItem()
。在位置0处,没有上一页,但是有下一页。如果您向上滑动,则只会看到POSITION 2
,因为ViewPager需要创建POSITION 2
以准备下一次滑动。如果您要跳转到第4项,则会看到POSITION 2 POSITION 3 POSITION 4
。