我从我的选项菜单中启动一些片段,例如首选项片段和对话框片段。
当我打开首选项片段并点击后退按钮时,整个活动将关闭。对于按照我的预期工作的对话框片段,情况并非如此。
有人可以解释为什么会发生这种情况以及可接受的处理方式是什么? :)
启动首选项片段:
getFragmentManager().beginTransaction()
.add(android.R.id.content, new SettingsFragment())
.addToBackStack("settings")
.commit();
答案 0 :(得分:8)
与我的回答here相关。
我对首选项片段有完全相同的问题。似乎大多数人必须放弃并使用偏好活动。
您将遇到的第一个问题是,在启动片段时,您需要使用替换而不是添加。该代码应该改变为:
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();
}
答案 1 :(得分:-1)
如果没有任何明确的理由命名您的后台堆栈状态,请使用null
作为参数:
getFragmentManager().beginTransaction()
.add(android.R.id.content, new SettingsFragment())
.addToBackStack(null)
.commit();