重新创建活动后,片段backstack中的两个Android ViewPage无法正常显示

时间:2016-02-01 20:57:45

标签: android android-fragments android-viewpager fragment-backstack

我的Android应用只有一个活动,所有片段都在一个framelayout中添加或替换。

问题是当我在片段backstack中有两个不同的viewpage并重新创建活动时,第二个viewpager将作为第一个viewpager出现。

下面是我按照它们发生的顺序将片段添加到backstack的方法,因此3是重新创建活动后出现的片段。

  1. setupPlacesEventMainView(),这是一个使用FragmentStatePagerAdapter的viewpager。(在重新创建活动后正确显示)
  2. setupPlaceDetailViewPager,这是一个使用FragmentStatePagerAdapter的viewpager。 (问题: PlacesEventMainViewPager显示在这里而不是PlaceDetailViewPager。即使我没有导航到EventSpecials,也会出现问题)
  3. setupEventSpecials(),这是一个listfragment。 (在重新创建活动后正确显示)
  4. 将PlacesEventMainViewPager添加到backstack

    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添加到backstack

     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个listfragments。
    • PlaceDetailViewPager包含2个listfragments
    • SpecialsList是1个listfragment。

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

    如果您需要更多详细信息,请与我们联系。谢谢!

1 个答案:

答案 0 :(得分:0)

你永远不会将PlacesEventMainViewPager添加到backstack,如果按顺序列出PlaceDetailViewPager,它会使PlaceDetailViewPager成为Backstack中的第一个。