【发布时间】:2014-05-03 05:57:05
【问题描述】:
我有一个具有两个属性的活动:
- private Fragment firstFragment;
- 私有 Fragment secondFragment;
在 onCreate 方法中:
adapter = new MyPagerAdapter(getSupportFragmentManager());
pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);
pager.setOffscreenPageLimit(6);
pager.setSaveEnabled(true);
其中 MyPagerAdapter 扩展了 FragmentStatePagerAdapter 类。 进入 getItem() 方法:
@Override
public Fragment getItem(int position) {
Bundle args = new Bundle();
switch (position) {
case FIRST:
secondFragment = new FirstFragment();
secondFragment.setArguments(args);
return secondFragment;
case SECOND:
secondFragment = new SecondFragment();
secondFragment.setArguments(args);
return secondFragment;
}
}
一切正常。
但是,当我改变屏幕方向时,私有属性设置为 null,我失去了两个片段的引用。 所以我尝试用以下方式序列化这个片段:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
getSupportFragmentManager().putFragment(outState, FirstFragment.class.getName(), firstFragment);
getSupportFragmentManager().putFragment(outState, SecondFragment.class.getName(), secondFragment);
}
并将它们加载到 onCreate 方法中:
if (savedInstanceState != null) {
firstFragment = (FirstFragment) getSupportFragmentManager().getFragment(savedInstanceState, FirstFragment.class.getName());
secondFragment = (SecondFragment) getSupportFragmentManager().getFragment(savedInstanceState, SecondFragment.class.getName());
}
我的问题:
1.将片段序列化为活动屏幕方向更改的正确方法吗?
2。有时我会出现错误:“Unmarshalling unknown type code 55 at offset 448”,这可能是由片段序列化引起的吗?”
编辑:
我需要将片段作为活动属性,因为我有一个进入活动的侦听器接口:
@Override
public void executeTask(String what) {
secondFragment.executeTask(what);
}
这个方法被调用到 firstFragment。所以FirstFragment可以执行SecondFragment的方法。
【问题讨论】:
标签: android serialization android-fragments android-viewpager parcelable