Android Fragments - 处理后退按钮

ser*_*kye 2 android android-fragments

我从我的选项菜单中启动了一些片段,例如首选片段和对话片段.

当我打开首选项片段并点击后退按钮时,整个活动将关闭.对于按照我的预期工作的对话框片段,情况并非如此.

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

要启动首选项片段:

getFragmentManager().beginTransaction()
                .add(android.R.id.content, new SettingsFragment())
                .addToBackStack("settings")
                .commit();
Run Code Online (Sandbox Code Playgroud)

kde*_*ney 8

有关我的答案在这里.

我对首选项片段有完全相同的问题.似乎大多数人必须放弃并使用偏好活动.

您将要遇到的第一个问题是,在启动片段时需要使用replace而不是add.该代码应该更改为如下所示:

getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment())
                .addToBackStack("settings")
                .commit();
Run Code Online (Sandbox Code Playgroud)

至于处理后退按钮,似乎"后堆栈"不会被系统后退按钮自动触发.我的解决方案是从onBackPressed覆盖手动弹出后台堆栈:

@Override
public void onBackPressed()
{
    if (inSettings)
    {
        backFromSettingsFragment();
        return;
    }
    super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)

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

private void backFromSettingsFragment()
{
    inSettings = false;
    getFragmentManager().popBackStack();
}
Run Code Online (Sandbox Code Playgroud)