Cha*_*ndo 3 java xml android android-menu
我尝试了onCreateOptionsMenu(Menu menu)和onPrepareOptionsMenu(Menu menu)方法,但是当应用程序在后台打开时,我无法更改图标可见性。因为我认为我需要在onResume()内调用这些方法
当应用程序第一次启动时它会按预期工作。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it present.
getMenuInflater().inflate(R.menu.example_menu, menu);
// show manu items if not ofline mode
if (Utils.checkNetworkStatus(ExampleActivity.this)) {
menu.findItem(R.id.edit).setVisible(true);
menu.findItem(R.id.delete).setVisible(true);
}else {
menu.findItem(R.id.edit).setVisible(false);
menu.findItem(R.id.delete).setVisible(false);
}
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu){
if (Utils.checkNetworkStatus(ExampleActivity.this)) {
menu.findItem(R.id.edit).setVisible(true);
menu.findItem(R.id.delete).setVisible(true);
}else {
menu.findItem(R.id.edit).setVisible(false);
menu.findItem(R.id.delete).setVisible(false);
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
感谢@jon 和@Oliver Adam 的回答。
它引导我找到最终的解决方案。这就是我以 100% 准确率解决问题的方法。
根据文档,如果我们需要在运行时更改菜单项,建议使用onPrepareOptionsMenu(Menu menu)方法,而不是使用onCreateOptionsMenu(Menu menu)
系统调用onCreateOptionsMenu()后,它会保留您填充的Menu的实例,并且不会再次调用onCreateOptionsMenu(),除非菜单由于某种原因失效。但是,您应该仅使用 onCreateOptionsMenu() 创建初始菜单状态,而不是在活动生命周期中进行更改。
如果要根据 Activity 生命周期中发生的事件修改选项菜单,可以在 onPrepareOptionsMenu() 方法中执行此操作。此方法将当前存在的 Menu 对象传递给您,以便您可以对其进行修改,例如添加、删除或禁用项目。(Fragments 还提供了 onPrepareOptionsMenu() 回调。)--Android 官方文档 --
当应用程序来自后台时,我们需要在onResume()方法中调用invalidateOptionsMenu()来刷新视图。
@Override
protected void onResume() {
super.onResume();
invalidateOptionsMenu();
}
@Override
public boolean onPrepareOptionsMenu(Menu menu){
if (Utils.checkNetworkStatus(ExampleActivity.this)) {
menu.findItem(R.id.edit).setVisible(true);
menu.findItem(R.id.delete).setVisible(true);
}else {
menu.findItem(R.id.edit).setVisible(false);
menu.findItem(R.id.delete).setVisible(false)
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
774 次 |
| 最近记录: |