0

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

问题是当我在片段后台堆栈中有两个不同的视图分页器并且重新创建活动时,第二个视图分页器作为第一个视图分页器出现。

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

  1. setupPlacesEventMainView(),这是一个使用 FragmentStatePagerAdapter 的 viewpager。(在重新创建活动后正确显示)
  2. setupPlaceDetailViewPager,这是一个使用 FragmentStatePagerAdapter 的 viewpager。(问题: 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 添加到 backstack

    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 个列表片段。

我可以通过单击 PlacesEventMainViewPager 片段中的一项来访问 PlaceDetailViewPager 片段。我可以通过单击 PlaceDetailViewPager 片段中的按钮来访问 SpecialsList。

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

4

1 回答 1

0

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

于 2016-02-01T22:19:05.077 回答