В моем приложении для Android есть только одно действие, и все фрагменты добавляются или заменяются в одном макете кадра.
Проблема в том, что когда у меня есть два разных пейджера в стеке фрагментов, и активность воссоздается, второй пейджер появляется как первый пейджер.
Ниже показано, как я добавляю фрагменты в стек в том порядке, в котором они происходят, поэтому 3 — это фрагмент, который появляется после воссоздания активности.
- setupPlacesEventMainView(), это пейджер, который использует FragmentStatePagerAdapter (отображается правильно после воссоздания активности)
- setupPlaceDetailViewPager, это пейджер, использующий FragmentStatePagerAdapter. (ПРОБЛЕМА: здесь отображается PlacesEventMainViewPager вместо PlaceDetailViewPager. Проблема возникает, даже если я не перехожу к EventSpecials)
- setupEventSpecials(), это фрагмент списка. (отображается правильно после воссоздания активности)
Добавить PlacesEventMainViewPager в резервную копию
public void setupPlacesEventMainView()
{
clearBackStack();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
PlacesEventMainViewPager placesEventMainViewPager = new PlacesEventMainViewPager();
transaction.replace(R.id.fragment_container, placesEventMainViewPager, PlacesEventMainViewPager.class.getSimpleName());
transaction.commit();
}
Добавить PlaceDetailViewPager в резервную копию
public void setupPlaceDetailViewPager(Event event) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
PlaceDetailViewPager placeDetailViewPager = new PlaceDetailViewPager();
placeDetailViewPager.setEvent(event);
transaction.add(R.id.fragment_container, placeDetailViewPager,PlaceDetailViewPager.class.getSimpleName());
transaction.addToBackStack(PlaceDetailViewPager.class.getSimpleName());
transaction.commit();
}
Добавить SpecialsList в стопку
public void setupEventSpecials(Agenda[] agendas) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
SpecialsList specialsList = new SpecialsList();
specialsList.setAgendas(agendas);
transaction.add(R.id.fragment_container, specialsList,SpecialsList.class.getSimpleName());
transaction.addToBackStack(SpecialsList.class.getSimpleName());
transaction.commit();
}
Что содержат фрагменты.
- PlacesEventMainViewPager содержит 3 фрагмента списка.
- PlaceDetailViewPager содержит 2 фрагмента списка
- SpecialsList — это 1 фрагмент списка.
Я могу получить доступ к фрагменту PlaceDetailViewPager, щелкнув один из элементов фрагмента PlacesEventMainViewPager. Я могу получить доступ к SpecialsList, нажав кнопку во фрагменте PlaceDetailViewPager.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Спасибо!