我已經有兩個屬性的活動:的Android ViewPager和片段的序列化
- 私人片段firstFragment;
- private 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;
}
}
和所有工作正常。
但是,當我改變屏幕方向時,私人屬性設置爲空,我失去了兩個片段的引用。 所以我試圖序列化該片段有:
@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.有時我有錯誤:「解組未知類型代碼55偏移448」,是有可能,它已經由片段序列化造成的「
編輯:
我需要因爲我一個監聽器接口爲活動有片段作爲活動屬性是:
@Override
public void executeTask(String what) {
secondFragment.executeTask(what);
}
這種方法被調用到firstFragment所以FirstFragment即可。執行SecondFragment的方法。
你說得對。我編輯我的問題... – CeccoCQ
這是一個很好的解決方法和可能,這是解決該片段的序列化的正確途徑。使用DataObserver將已加載的數據更改爲片段和業務模塊以執行任何其他類型的操作。 – CeccoCQ