bur*_*ius 9 android android-fragments android-optionsmenu
我有一个有几个片段的应用程序.
只有A片段有一个选项菜单.可以从片段B(其扩展了listfragment)启动片段.
所以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);
}
Run Code Online (Sandbox Code Playgroud)
设置片段:
@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);
}
Run Code Online (Sandbox Code Playgroud)
问题出在哪儿?
编辑:
经过几个小时的调试,我找到了解决方案 问题是片段事务的fragmentManager不同.对于设置片段,我使用了getSupportFragmentManager(),对于其他人 - fragmentManager().这会导致一些碎片移动到后面的堆栈.
我看到两个代码嫌疑人.片段A的代码建议:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_station, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
...
}
Run Code Online (Sandbox Code Playgroud)
笔记:
super.onCreateOptionsMenu()被正常地充气之后被调用.这没有很好的记录,所以我不确定有什么区别.许多人认为最佳答案的相关SO帖子是Fragment中的@Android Options菜单.setHasOptionsMenu(true)是在相同的片段而不是设置片段中完成的.片段保存自己的数据和状态.您无法轻松修改片段之间的状态.| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |