重新创建 activity 后,片段后台堆栈中的两个 android ViewPager 未正常显示

Two android ViewPagers in the fragment backstack are not coming up properly after activity is recreated

我的 Android 应用程序只有一个 activity 并且所有片段都在一个框架布局中添加或替换。

问题是当我在片段后台堆栈中有两个不同的 viewpager 并且 activity 被重新创建时,第二个 viewpager 作为第一个 viewpager 出现。

下面是我如何按照片段发生的顺序将片段添加到后台堆栈,因此 3 是 activity 重新创建后出现的片段。

  1. setupPlacesEventMainView(),这是一个使用 FragmentStatePagerAdapter 的 viewpager。(在 activity 重新创建后正确显示)
  2. setupPlaceDetailViewPager,这是一个使用FragmentStatePagerAdapter 的viewpager。 (问题: PlacesEventMainViewPager 显示在这里而不是 PlaceDetailViewPager。即使我不导航到 EventSpecials 也会出现问题)
  3. setupEventSpecials(),这是一个列表片段。 (重新创建 activity 后正确显示)

将 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 片段中的一项来访问 PlaceDetailViewPager 片段。我可以通过单击 PlaceDetailViewPager 片段中的按钮来访问 SpecialsList。

如果您需要更多详细信息,请告诉我。谢谢!

您永远不会将 PlacesEventMainViewPager 添加到后台堆栈,如果您按顺序列出它们,PlaceDetailViewPager 将成为后台堆栈中的第一个。