片段交易,操作栏和后台堆栈

Tim*_*eed 7 android android-fragments android-actionbar

在我的主要活动中,我有一个动作栏NAVIGATION_MODE_TABS.每个选项卡的内容都是一个listfragment.

我想这样做,以便在单击一个列表项时,一个新的片段进入视图,并将操作栏模式更改为NAVIGATION_MODE_STANDARD(以便现在隐藏选项卡).

我已设法使用以下代码:

在listitemclick方法中:

        ActionBar actionBar = getActivity().getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);

        Fragment albumListFragment = new AlbumListFragment();
        albumListFragment.setArguments(bundle);
        FragmentTransaction ft = getFragmentManager().beginTransaction();

        ft.replace(android.R.id.content, albumListFragment);
        ft.addToBackStack(null);

        // Commit the transaction
        ft.commit();

        Log.i("FragmentList", "Item clicked: " + id);
Run Code Online (Sandbox Code Playgroud)

问题是当我按下后退按钮时,标签仍然消失,前一个片段不会返回到视图中.

我做错了什么..是否与碎片堆叠有关?我应该采取另一种方式,甚至覆盖背压吗?

- 编辑 -

为清楚起见 - 我在调用fragmenttransaction.replace时调用addToBackStack,但是当我按下后退按钮时,前一个片段不会被恢复.

Gee*_*ugs -1

后退栈结束当前活动并转到前一个活动,而不是前一个片段。(请参阅后台堆栈指南:http://developer.android.com/guide/components/tasks-and-back-stack.html)。

正如您所建议的,您可以通过重写 onBackPressed 来强制执行该行为,但是,我不知道我会以这种方式改变自然的 Android 行为。如果您查看其他执行类似操作的应用程序,特别是核心应用程序,则后退按钮不会转到上一个片段,而是转到上一个 Activity。

此外,您还可以完全控制“向上”按钮的行为(即操作栏上带有向左箭头的应用程序图标)。您必须以编程方式将其设置为用作按钮,如 ActionBar 指南中所述(如果您需要知道如何执行此操作,请告诉我),并且您可以让它在堆栈上设置您之前的片段维持某处。