所以,我在FragmentActivity中有3个片段。我有一个带有一些容器等的xml布局文件,所以我setContentView(R.layout.my_activity)
然后以编程方式添加3个片段。其中2个片段与FragmentPagerAdapter一起使用,因此我可以在它们之间滑动。
现在,我需要在另一个片段之前创建 2个可刷卡的片段(例如片段1和2的 onCreateView 方法应该在<片段3)的em> 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();
}
...
我还尝试使用 initViewPager 方法替换上面的代码:
...
...
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
任何人都可以告诉我如何实现我正在尝试做的事情,或建议我可以尝试的事情吗?我还应该提一下,重新分解这样的片段依赖性操作是从它们的构造函数中执行的,这不是一种选择。
答案 0 :(得分:2)
正如我的问题下面的评论所示,我决定重新分解我的代码以删除片段之间的依赖关系是最好的方法。我不能/不应该依赖于引擎盖下的内容(即Android片段实例化/创建顺序),以便我的代码能够按照我的预期运行。