2

我正在使用这一行来显示当前片段:

Item myFragment = (Item) getSupportFragmentManager().findFragmentById(R.id.pager);

这是我的 ViewPager 的一个例子

| 一个 | 乙| 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();
    }
}

当我启动我的应用程序时,我的记录器显示: POSITION 0 POSITION 1

正常吗?它不应该只显示“POSITION 0”吗?当我滑动时,“位置 1”?

4

1 回答 1

4

首先,您要求基于 ID 的片段。IDR.id.pager只是一些随机数,与任何事物相关联R.id.pager。在提供的代码中,您没有为任何片段分配 ID,因此您得到任何东西是幸运的。

如果要从 Viewpager 中检索 Fragment,则需要遵循此问题中回答的标准: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.

于 2012-10-31T18:46:54.660 回答