我有一个包含多个片段的应用。
只有 A 片段拥有选项菜单。 B 片段可以从扩展列表片段的 B 片段中初始化。
因此,如果我从 B 片段中选择某个项目,则会启动带有选项菜单的 A 片段。如果返回,B 片段仍然没有选项菜单。
问题在于,如果我的当前窗口是 A 片段,而我从导航抽屉中选择“设置”菜单(扩展了首选项片段),则会显示带有来自 A 片段的选项菜单的设置片段。但如果我从导航抽屉中选择“设置”菜单,而我的当前窗口是 B、C、D(没有选项菜单),则一切都正常。
片段 A:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_station, menu);
}
设置碎片:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
sharedPreferenceSettings = new SharedPreferenceSettings(getActivity());
addPreferencesFromResource(R.xml.settings);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_settings, container, false);
}
问题出在哪里?
编辑:
经过数小时的调试,我找到了解决方案。问题在于不同的碎片事务使用了不同的fragmentManager。对于设置碎片,我只使用了getSupportFragmentManager(),而对于其他碎片则使用了fragmentManager()。这导致一些碎片无法移动到后台堆栈。