Два андроида ViewPager в стеке фрагментов не появляются должным образом после воссоздания активности

В моем приложении для Android есть только одно действие, и все фрагменты добавляются или заменяются в одном макете кадра.

Проблема в том, что когда у меня есть два разных пейджера в стеке фрагментов, и активность воссоздается, второй пейджер появляется как первый пейджер.

Ниже показано, как я добавляю фрагменты в стек в том порядке, в котором они происходят, поэтому 3 — это фрагмент, который появляется после воссоздания активности.

  1. setupPlacesEventMainView(), это пейджер, который использует FragmentStatePagerAdapter (отображается правильно после воссоздания активности)
  2. setupPlaceDetailViewPager, это пейджер, использующий FragmentStatePagerAdapter. (ПРОБЛЕМА: здесь отображается PlacesEventMainViewPager вместо PlaceDetailViewPager. Проблема возникает, даже если я не перехожу к EventSpecials)
  3. 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.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Спасибо!


person thatAndriodGuy    schedule 01.02.2016    source источник


Ответы (1)


Вы никогда не добавляете PlacesEventMainViewPager в задний стек, что делает PlaceDetailViewPager первым в заднем стеке, если вы перечислили их по порядку.

person young_souvlaki    schedule 01.02.2016
comment
Большое спасибо!!! Это беспокоило меня какое-то время. Я проголосовал за, но у меня нет репутации 15. - person thatAndriodGuy; 02.02.2016