我想要做的是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中删除它。
任何想法?
答案 0 :(得分:0)
我想要做的是实现onBackPressed
,即按下后退按钮将处理上一个片段,但我不想处理先前的实例而是新的实例,所以我使用了问题& #39;代码。要做到这一点,我正在向BackStack添加片段,以便知道哪个片段是之前的[Backstack的顶部],然后创建它的新实例。所以我得到它的名字然后创建它的新实例然后从BackStack中删除它[这就是问题,我无法从后台堆栈中删除它]。
最后我发现我根本不需要使用BackStack来了解我刚刚使用ArrayList
String
来保存每个事务的先前片段是什么片段的名称或标签,例如在交易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();
}
并且它很有效,如需要!