FragmentManager给了我错误的片段

时间:2012-10-31 18:14:14

标签: android android-fragments android-viewpager

我正在使用此行显示当前片段:

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”?

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