Я активность с двумя атрибутами:Android ViewPager и фрагмент сериализации
- частного фрагмента firstFragment;
- частный фрагмент 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. Иногда я имею ошибку: "немаршалинг неизвестный тип кода 55 на смещение 448", возможно, что это вызвано фрагментом сериализации»
EDIT:
I необходимо иметь фрагменты, как атрибуты активности, потому что я интерфейс слушателя в деятельности, что:
@Override
public void executeTask(String what) {
secondFragment.executeTask(what);
}
этот метод был вызван в firstFragment так firstFragment может. выполните метод SecondFragment.
Вы правы. Я редактирую свой вопрос ... – CeccoCQ
Это хорошее обходное решение и, вероятно, это правильный способ решения сериализации фрагмента. Использование DataObserver для изменения загруженных данных в фрагмент и бизнес-модуль для выполнения любых других операций. – CeccoCQ