为什么Fragment.addToBackStack()导致Back按钮什么都不做?

时间:2012-01-26 16:30:54

标签: android

  1. 活动1可见。按一个按钮,活动2打开。
  2. 活动2将片段A添加到自身(和后台堆栈)并显示正常
  3. 按下片段中的按钮可转换为另一个片段B
  4. 按返回。什么都没发生。咦?背压似乎被吸收而没有作用,显示器保持不变。
  5. 第二次按Back,它会按预期恢复到活动1。
  6. 为什么我的片段没有在第4步显示?我已经将片段添加到后台堆栈,所以为什么(当Back按钮看起来已经知道它存在时)它是否显示片段?

    这是我在活动2中用来打开片段A的代码。

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.act_profile_edit);
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
        transaction.addToBackStack(null);
        transaction.add(android.R.id.content, new MyFragment());
        transaction.commit();
    }
    

    这是打开Fragment B的代码

        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
        transaction.add(android.R.id.content, new MyOtherFragment());
        transaction.commit();
    

1 个答案:

答案 0 :(得分:10)

您是否尝试过transaction.replace(...)代替transaction.add(...)?这应该工作。我猜是因为如果你只是在另一个上面添加一个片段,它就不会看到事务需要从片段A返回。

修改 问题的实际答案如下:评论中应该使用addToBackStack()作为替换的片段,而不是被替换的片段。