2

我正在从我的选项菜单中启动一些片段,例如首选项片段和对话框片段。

当我打开首选项片段并点击后退按钮时,整个活动将关闭。这不是我所期望的对话片段的情况。

有人可以解释为什么会发生这种情况以及可接受的处理方式是什么?:)

要启动首选项片段:

getFragmentManager().beginTransaction()
                .add(android.R.id.content, new SettingsFragment())
                .addToBackStack("settings")
                .commit();
4

2 回答 2

8

与我在这里的回答有关。

我对首选项片段有完全相同的问题。似乎大多数人必须放弃并改用 Preference Activity。

您将遇到的第一个问题是在启动片段时需要使用替换而不是添加。该代码应更改为如下所示:

getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment())
                .addToBackStack("settings")
                .commit();

至于处理后退按钮,似乎“后退堆栈”是系统后退按钮不会自动触发的东西。我的解决方案是从onBackPressed覆盖中手动弹出返回堆栈:

@Override
public void onBackPressed()
{
    if (inSettings)
    {
        backFromSettingsFragment();
        return;
    }
    super.onBackPressed();
}

每当我导航到我的首选项片段时,我都会在活动中将 inSettings布尔值设置为 true 以保留该状态。这是我的backFromSettingsFragment方法的样子:

private void backFromSettingsFragment()
{
    inSettings = false;
    getFragmentManager().popBackStack();
}
于 2013-09-06T19:47:17.497 回答
-1

如果没有任何明确的原因将您命名为返回堆栈状态,请null用作参数:

getFragmentManager().beginTransaction()
                .add(android.R.id.content, new SettingsFragment())
                .addToBackStack(null)
                .commit();
于 2012-09-04T08:08:52.010 回答