0

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

Activity 1(一个 ListView)-> Activity 2(一个加载 Fragment 的 ListView)-> Fragment 1 -> Fragment 2。

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

在某些时候,我需要添加一个 ActionBar。由于代表谷歌进行了一些奇怪的编程,我必须扩展导入 android.support.v7.app.ActionBarActivity 的 ActionBarActivity,这需要我将所有片段管理器更改为“支持”导入 android.support.v4.app。片段管理器。

结果,我在整个工作流程中都有一个 ActionBar,但我只能前进到 Fragment 2。任何按 Back 按钮,都会导致 Activity 1 出现,没有 BackStack。

那么,是否不可能使用带有 ActionBar 和 BackStack 的动作/片段,或者我的 BackStack 是否因其他原因而损坏?

任何帮助,将不胜感激。

谢谢!

4

2 回答 2

0

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

我发现,后退按钮仅由 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...
}
于 2015-03-12T00:40:16.447 回答
0

如果您正在使用诸如 add()、replace() 等 FragmentTransaction 调用,则在调用 commit() 之前调用 FragmentTransaction 上的 addToBackStack()。这将设置为使后退按钮可以按照您的预期与片段一起使用。

于 2015-03-12T00:10:38.550 回答