2015-09-25 68 views
0

在我的活动后,我添加的第一个片段(myFragmentA)在onCreate()方法:机器人:片段中的活动:popBackStack()本片段的数量剧照相同

getSupportFragmentManager() 
       .beginTransaction() 
       .setCustomAnimations(enterAnim, exitAnim, popEnterAnim, popExitAnim) 
       .add(containerViewId, myFragmentA, fragmentTag) 
       .addToBackStack(null) 
       .commit(); 

在该第一片段当我点击一个按钮,我添加了一个新的片段(myFragmentB):

getSupportFragmentManager() 
       .beginTransaction() 
       .setCustomAnimations(enterAnim, exitAnim, popEnterAnim, popExitAnim) 
       .replace(containerViewId, myFragmentB, fragmentTag) 
       .addToBackStack(null) 
       .commit(); 

全部是伟大的这一点。

当我赶回从活动按:

@Override 
public void onBackPressed() { 
    // >>> Just to prevent to keep the first fragment !! 
    if (getSupportFragmentManager().getFragments().size() > 1) { 
     getSupportFragmentManager().popBackStack(); 
    } 
} 

返回从myFragmentB> myFragmentA按:OK

返回从myFragmentA压(只是为了验证有没有popback):失败。 myFragmentA也被删除!我想永远保持它。我不知道为什么getSupportFragmentManager()。getFragments()。size()等于2!

感谢您的帮助!

回答

0

您会发现,默认情况下,您的容器活动将被添加到后退堆栈中。在你的代码中,你已经为这两个片段写了addToBackStack(null),这会将你的片段添加到你的活动的上下堆栈中,默认情况下它会被添加到后端堆栈中。这解释了为什么你看到大小2,一个可能是你的活动,另一个可能是你的片段。