片段和活动中的Backstack问题

时间:2018-08-03 07:03:49

标签: android android-fragments back-stack fragment-backstack fragmentmanager

假设我总共有7个活动,例如活动AI中的A,B,C,D,E,F,G有4个片段,请点击第四个片段,然后启动活动B,然后活动C,D,E,F在进入活动F之后,我想导航到活动A的2个片段,但是我想清除所有后退堆栈,直到活动A的第2个片段,在单击“返回”按钮后,活动1的第一个片段将显示,因为我将所有片段添加到backstack我将如何解决这个问题。请帮助我

在活动F中调用第二个片段的代码

SeconFragment fragment = new SeconFragment();
            addFragmentToActivity(getFragmentManager(), fragment, R.id.fragment_container_top,"secondfagment");

  public void addFragmentToActivity(@NonNull FragmentManager fragmentManager,
                                             @NonNull Fragment fragment, int frameId,String backstacklabel) {
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(frameId, fragment,backstacklabel);
        transaction.commit();
    }

2 个答案:

答案 0 :(得分:0)

您的问题有点令人困惑,但这是得到的

FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {  
    Fragment SecondFrag= fm .findFragmentByTag("yourFragmentTag");
     if(SecondFrag !=null){
        return;
       }
     else{
     fm.popBackStack();
    }
}

在代码fm .findFragmentByTag("yourFragmentTag") yourFragmentTag 替换为您不想从backstack删除的fragmentTag

希望这可以解决您的问题

答案 1 :(得分:0)

使用Intent标志FLAG_ACTIVITY_CLEAR_TOP启动启动活动A,然后检查第一个和第二个片段实例是否仍然有效。如果没有,请按AddToBackStack()

顺序重新启动片段
Fragment frag = fm.findFragmentByTag("fragmentTag");
  if(frag!=null){
     loadFragments(); // code to launch fragments.
    }
  else{
  fm.popBackStack();
}