【发布时间】:2012-10-22 04:31:52
【问题描述】:
我正在创建一个菜单,其中一个项目用于锁定对象。单击此项目时,应使用按钮重新创建菜单以解锁该项目。我为此创建了两个菜单。这工作正常。我读到在 Android 版本 >= 11 中,在显示菜单时不再调用 onPrepareOptionsMenu,我必须调用 invalidateOptionsMenu()。所以我将构建目标(在清单和属性中)更改为 11,并在 4.0.3 的 AVD 上运行应用程序。该程序仍然运行良好,但我认为它不应该了,我应该检查一下
if (Build.VERSION.SDK_INT >= 11)
{
invalidateOptionsMenu();
}
这是我的代码:
public class MainActivity3 extends Activity{
boolean locked;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
locked = false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.changing_menu1, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
MenuInflater inflater = getMenuInflater();
if (locked) {
inflater.inflate(R.menu.changing_menu2, menu);
}
else {
inflater.inflate(R.menu.changing_menu1, menu);
}
return super.onPrepareOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.Menu1:
break;
case R.id.Menu2 :
break;
case R.id.Menu3 :
locked = !locked;
break;
}
return true;
}
}
所以菜单在 4.0 中仍然刷新/重新创建。 我对 invalidateOptionsMenu(); 的用法有误解吗?
【问题讨论】:
-
我不知道如何举报,但即使是android开发人员也不清楚这一点。在这里检查:developer.android.com/guide/topics/ui/… 如果您只阅读此内容,您将了解 invalidateOptionsMenu() 不会调用 onCreateOptionsMenu() 并且在 Android >= 11 OnPrepareOptionsMenu() 每次打开菜单时都不起作用...但确实如此.哎呀?很好的问题erdomester和很好的答案@justinmorris