使用 ActionBarActivity 和 getSupportFragmentManager 时 BackStack 损坏

BackStack broken when using ActionBarActivity & getSupportFragmentManager

我的应用程序中有以下工作流程:

Activity 1(一个 ListView)-> Activity 2(一个加载片段的 ListView)-> 片段 1 -> 片段 2.

一切都很顺利,我可以前进到片段 2,然后按“后退”按钮向后遍历每一步。

有时我需要添加一个 ActionBar。由于代表 google 的一些奇怪的编程,我必须扩展导入 android.support.v7.app.ActionBarActivity 的 ActionBarActivity,这需要我将所有片段管理器更改为 'support' 导入 android.support.v4.app.FragmentManager.

结果是,我的工作流程中有一个 ActionBar,但我只能前进到 Fragment 2。任何按“后退”按钮都会导致 Activity 1 出现,没有 BackStack .

那么,Actions/Fragments ActionBar 和 BackStack 是不可能的,还是我的 BackStack 因其他原因损坏?

如有任何帮助,我们将不胜感激。

谢谢!

如果您使用的是 FragmentTransaction 调用,如 add()、replace() 等,请在调用 commit() 之前对 FragmentTransaction 调用 addToBackStack()。这将进行设置,以便后退按钮将按照您的预期与片段一起使用。

我解决了这个问题。显然,ActionBarActivity 不会调用通常的 onBackPressed(),也不会与其他各种 hacks 一起使用。

我发现后退按钮仅由 onOptionsItemSelected() 捕获,例如:

public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if(id == android.R.id.home) {
        // use popBackStack() and super.onBackPressed()
        return true;
    }
    // check for other button presses...
}