控制android片段创建顺序

控制android片段创建顺序,android,android-fragments,android-activity,fragmentpageradapter,Android,Android Fragments,Android Activity,Fragmentpageradapter,我在一个片段活动中有3个片段。我有一个包含一些容器等的xml布局文件,所以我setContentView(R.layout.my_activity),然后以编程方式添加3个片段。其中2个片段与FragmentPagerAdapter一起使用,因此我可以在它们之间滑动 现在,我需要在另一个片段之前创建两个可滑动的片段(例如,片段1和片段2的onCreateView方法应该在片段3的onCreateView方法之前调用)。然而,片段3总是先创建的。守则: public class MyActivit

我在一个片段活动中有3个片段。我有一个包含一些容器等的xml布局文件,所以我
setContentView(R.layout.my_activity)
,然后以编程方式添加3个片段。其中2个片段与FragmentPagerAdapter一起使用,因此我可以在它们之间滑动

现在,我需要在另一个片段之前创建两个可滑动的片段(例如,片段1和片段2的onCreateView方法应该在片段3的onCreateView方法之前调用)。然而,片段3总是先创建的。守则:

public class MyActivity extends FragmentActivity {

private ViewPager viewPager;
private MyPagerAdapter pagerAdapter;
private Fragment1 fragment1;
private Fragment2 fragment2;
private Fragment3 fragment3;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity);
    initViewPager();
    initFragment3();
}

private void initViewPager() {
    List<Fragment> pagerFragments = new LinkedList<Fragment>();
    fragment1 = (Fragment1) Fragment.instantiate(this, Fragment1.class.getName());
    fragment2 = (Fragment2) Fragment.instantiate(this, Fragment2.class.getName());
    pagerFragments.add(fragment1);
    pagerFragments.add(fragment2);
    pagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), pagerFragments);
    viewPager = (ViewPager) findViewById(R.id.fragment_pager);
    viewPager.setAdapter(pagerAdapter);
}

private void initStatsFragment() {
    fragment3 = new Fragment3();
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.add(R.id.fragment3_container, fragment3);
    transaction.commit();
}
    ...

有人能告诉我如何才能完成我正在努力做的事情,或者提出一些我可以尝试的建议吗?我还应该提到,重新分解代码以从其构造函数执行片段依赖性操作不是一个选项。

正如我问题下面的评论所指出的,我认为重新分解代码以删除片段之间的依赖性是最好的方法。我不能/不应该依靠引擎盖下发生的事情(即Android片段实例化/创建顺序)来让我的代码也像我预期的那样运行

重新考虑因素。您不应该在片段之间有这样的依赖关系。即使你现在以某种方式修复了它,你以后也会遇到严重的麻烦。是的,我也在想同样的事情。我可能会选择重新分解:(我最后选择了重新分解,我认为这绝对是值得的。如果有人读到这篇文章时有类似的问题,你知道需要做什么!
...
...
private void initViewPager() {
    List<Fragment> pagerFragments = new LinkedList<Fragment>();
    fragment1 = new Fragment1();
    fragment2 = new Fragment2();
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.add(R.id.swipe_fragment_container, fragment1);
    transaction.add(R.id.swipe_fragment_container, fragment2);
    transaction.commit();
    pagerFragments.add(fragment1);
    pagerFragments.add(fragment2);
    pagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), pagerFragments);
    viewPager = (ViewPager) findViewById(R.id.fragment_pager);
    viewPager.setAdapter(pagerAdapter);
}
    ...
    ...
01-30 15:05:06.250: E/AndroidRuntime(2772): java.lang.IllegalStateException: Can't change container ID of fragment Fragment1{416461c8 #1 id=0x7f0b0003 android:switcher:2131427332:0}: was 2131427331 now 2131427332