假设我总共有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();
}
答案 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();
}