![](/img/trans.png)
[英]Remove specefic fragment from backstack that is not on top of backstack
[英]remove Top Fragment of BackStack
我想要做的是onBackPressed
我想创建一个顶级片段的新对象,所以我正在尝试这段代码:
if (getFragmentManager().getBackStackEntryCount() > 1) {
FragmentManager.BackStackEntry backEntry =getFragmentManager().getBackStackEntryAt(getFragmentManager().getBackStackEntryCount()-1);
String Back_fragment_name=backEntry.getName();
if(Back_fragment_name.equals("Frag1")){
Frag1 frag = new Frag();
getFragmentManager().beginTransaction().replace(R.id.RR, frag , "Frag1").commit();
}else if(Back_fragment_name.equals("Frag2")){
Frag2 frag = new Frag2();
getFragmentManager().beginTransaction().replace(R.id.RR, frag , "Frag2").commit();
}else if(Back_fragment_name.equals("Frag3")){
Frag3 frag = new Frag3();
getFragmentManager().beginTransaction().replace(R.id.RR, frag , "Frag3").commit();
}
//getFragmentManager().popBackStack(); //Wrong
} else{
super.onBackPressed();
}
问题是我想我应该从BackStack中删除Top Fragment但是使用popBackStack
是错误的,因为它显示了顶部片段,我只需要从BackStack中删除它。
有任何想法吗?
我试图做的是实现onBackPressed
,即按下后退按钮将处理前一个片段,但我不想处理先前的实例而是新的实例,所以我使用了问题的代码。 要做到这一点,我正在向BackStack添加片段,以便知道哪个片段是之前的[Backstack的顶部],然后创建它的新实例。 所以我得到它的名字然后创建它的新实例然后从BackStack中删除它[这就是问题,我无法从后台堆栈中删除它]。
最后我发现我不需要在All使用BackStack来知道我刚刚使用String
的ArrayList
来保存每个事务处理片段的名称或标记以前的片段,例如在处理Frag1
我这样做:
Frag1 frag1 = new Frag1 ();
fragmentTransaction.replace(R.id.RR, frag1 , "frag1").commit();
mPreviousFragmentsNames.add("frag1");
和onBackPressed
将是这样的:
if(!Removed_Last_Fragment_Name_From_backList){
// a boolean value, removing this will cause a bad behavior
// that is if back button pressed it transact current shown fragment first then u need to press back again to go to previous one
mPreviousFragmentsNames.remove(mPreviousFragmentsNames.size()-1);
Removed_Last_Fragment_Name_From_backList = true;
}
if (!mPreviousFragmentsNames.isEmpty()) {
String Back_fragment_name = mPreviousFragmentsNames.get(mPreviousFragmentsNames.size()-1);
if(Back_fragment_name.equals("Frag1")){
Frag1 frag = new Frag();
getFragmentManager().beginTransaction().replace(R.id.RR, frag , "Frag1").commit();
}else if(Back_fragment_name.equals("Frag2")){
Frag2 frag = new Frag2();
getFragmentManager().beginTransaction().replace(R.id.RR, frag , "Frag2").commit();
}else if(Back_fragment_name.equals("Frag3")){
Frag3 frag = new Frag3();
getFragmentManager().beginTransaction().replace(R.id.RR, frag , "Frag3").commit();
}
} else{
super.onBackPressed();
}
并且它很有效,如需要!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.