跟踪 contentView 的变量,然后调用 invalidateOptionsMenu()
Variable to keep track of contentView, then call inalidateOptionsMenu()
我的主要目标是根据 Activity 中当前的布局刷新选项菜单。当 R.layout.preweb 处于活动状态时,我不希望操作栏上的按钮处于活动状态,但是当 setContentView 更改为 R.layout.main 时变为活动状态,invalidateOptionsMenu 并膨胀。这是我现在拥有的:
private int mViewMode;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return mViewMode == 2;
}
在我的整个活动中,在随机方法中,我有这个:
setContentView(R.layout.preweb);
mViewMode = 1;
//or somewhere else
setContentView(R.layout.main);
mViewMode = 2;
invalidateOptionsMenu();
所以基本上,只要 mViewMode 设置为 2,就会调用 invalidateOptionsMenu,然后 onCreateOptionsMenu 应该重新触发,并且 mViewMode 现在等于 2,然后我应该膨胀。但什么也没有发生——它永远不会膨胀。
这里有什么?有什么建议吗?
使用 invalidateOptionsMenu()
, method onPrepareOptionsMenu(android.view.Menu)
will be called, not onCreateOptionsMenu()
使菜单无效。所以需要重写这个方法,需要写代码显示菜单项或者隐藏菜单项。
例如
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
if (mViewMode == 2) {
// Need to show menu items
menu.findItem(R.id.menuitem1).setVisible(true);
menu.findItem(R.id.menuitem2).setVisible(true);
} else {
// Need to hide menu items
menu.findItem(R.id.menuitem1).setVisible(false);
menu.findItem(R.id.menuitem2).setVisible(false);
}
return true;
}
和 onCreateOptionsMenu()
does not gets called when you say invalidateOptionsMenu()
,因此无需从那里 return false
。你总是需要returntrue
从它。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return true;
}
我的主要目标是根据 Activity 中当前的布局刷新选项菜单。当 R.layout.preweb 处于活动状态时,我不希望操作栏上的按钮处于活动状态,但是当 setContentView 更改为 R.layout.main 时变为活动状态,invalidateOptionsMenu 并膨胀。这是我现在拥有的:
private int mViewMode;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return mViewMode == 2;
}
在我的整个活动中,在随机方法中,我有这个:
setContentView(R.layout.preweb);
mViewMode = 1;
//or somewhere else
setContentView(R.layout.main);
mViewMode = 2;
invalidateOptionsMenu();
所以基本上,只要 mViewMode 设置为 2,就会调用 invalidateOptionsMenu,然后 onCreateOptionsMenu 应该重新触发,并且 mViewMode 现在等于 2,然后我应该膨胀。但什么也没有发生——它永远不会膨胀。
这里有什么?有什么建议吗?
使用 invalidateOptionsMenu()
, method onPrepareOptionsMenu(android.view.Menu)
will be called, not onCreateOptionsMenu()
使菜单无效。所以需要重写这个方法,需要写代码显示菜单项或者隐藏菜单项。
例如
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
if (mViewMode == 2) {
// Need to show menu items
menu.findItem(R.id.menuitem1).setVisible(true);
menu.findItem(R.id.menuitem2).setVisible(true);
} else {
// Need to hide menu items
menu.findItem(R.id.menuitem1).setVisible(false);
menu.findItem(R.id.menuitem2).setVisible(false);
}
return true;
}
和 onCreateOptionsMenu()
does not gets called when you say invalidateOptionsMenu()
,因此无需从那里 return false
。你总是需要returntrue
从它。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return true;
}