繁体   English   中英

删除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来知道我刚刚使用StringArrayList来保存每个事务处理片段的名称或标记以前的片段,例如在处理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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM