我正在测试我的应用程序"不要保持活动"开发者选项的选项。当我尝试对应用程序进行后台处理并启动它时,我会在操作栏中添加多个重复图标。
我正在添加片段中的上下文菜单图标。我有一个字符串传递给片段的字符串。当我启动并启动应用程序时,Android会尝试重新创建活动,并且在此过程中会多次调用 setHasOptionsMenu(true); ,并向操作栏添加重复的图标。
以下修复此问题,但想知道这是否是最佳方法
if(savedInstanceState == null) {
setHasOptionsMenu(true);
}
答案 0 :(得分:1)
也许我回答你的问题有点迟了,但对未来的用户来说可能会有用。
问题根源:
当您启动应用程序并启动它时,系统将保存并恢复您的片段状态。此外,还会调用onCreate()
方法并将新片段添加到您的“活动”中,最终会在您的活动中运行多个片段,每个片段都会在菜单中添加一个项目。
解决方案:
(+)正确修复:在添加片段之前,只需在onCreate()
方法中添加空检查(以避免重复)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout);
if (savedInstanceState == null) {
Fragment fragment = ...
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fragment_container, fragment)
.commit();
}
}
(+)或 workaround1 :清除片段中的menu
onCreateOptionsMenu()
内部方法
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.your_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
(+)或 workaround2 :仅当您在OP中提到的setHasOptionsMenu(true)
时调用savedInstanceState == null
。