如何避免在setCurrentItem之前创建第一个片段?

时间:2014-01-26 03:15:17

标签: android android-fragments android-viewpager android-fragmentactivity fragmentpageradapter

我正在使用FragmentActivity和ViewPager来显示几个片段。我希望每次根据传递给FragmentActivity的意图显示不同的片段。但问题是当我在setAdapter()之后使用setCurrentItem()时,第一个Fragment将总是被创造出来,我该如何避免这种情况?

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.container_page);

    mDemoCollectionPagerAdapter = new FragmentPageAdapter(
            getSupportFragmentManager());

    mViewPager = (ViewPager)findViewById(R.id.pager);   

    mViewPager.setAdapter(mDemoCollectionPagerAdapter);

    Intent intent = getIntent();
    int whichFragment = intent.getIntExtra(Constants.EXTRA_WHICH_FRAGMENT, 0);

    mViewPager.setCurrentItem(whichFragment, false);
    setActionBarTitle(whichFragment);

    mViewPager.setOnPageChangeListener(this);   
}

2 个答案:

答案 0 :(得分:0)

该应用可能会花一些时间来检索您的额外内容,因此他会膨胀您的第一个片段。

尝试在setAdapter()之前放置它:

Intent intent = getIntent();
int whichFragment = intent.getIntExtra(Constants.EXTRA_WHICH_FRAGMENT, 0);

然后,在setAdapter之后,设置当前项目。

答案 1 :(得分:0)

您可以从适配器中删除前面的片段......然后添加它们..

添加其他片段后别忘了拨打notifyDataSetChanged()。否则会出现异常

此外,您可能需要在适配器中覆盖此方法getItemPosition()以返回所有片段的递增位置。