onprepareoptionsmenu 默认被调用
onprepareoptionsmenu was called by default
我需要在菜单项的单击事件期间动态更改菜单项。
所以我在 activity.
中实现了 onOptionsItemSelected
public class ResultActivity extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main_actions, menu);
return true;
}
}
并且我在 onOptionsItemSelected 方法中调用 invalidateOptionsMenu,后者应该调用 onPrepareOptionsMenu
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id){
case R.id.action_group: {
invalidateOptionsMenu();
break;
}
}
}
此外,我正在尝试在 onPrepareOptionsMenu 方法中从菜单中删除一项。
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
Log.d(TAG,"In onPrepareOptionsMenu");
menu.removeItem(R.id.action_group);
Log.d(TAG,"Group icon is removed");
return super.onPrepareOptionsMenu(menu);
}
问题是,项目是在 activity 启动期间删除的,而不是等到相应的菜单项被单击时才被删除。
谁能告诉我问题出在哪里..TIA
问题是 onPrepareOptionsMenu(Menu)
无论如何都会被调用,只要您的菜单需要显示或重新加载。这包括来自 invalidateOptionsMenu()
的调用,也包括来自正在创建的 Activity 的调用。
例如,您可以在实际删除项目之前检查布尔状态。
public boolean mRemoveItem;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id){
case R.id.action_group: {
mRemoveItem = true;
invalidateOptionsMenu();
break;
}
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if (mRemoveItem) {
menu.removeItem(R.id.action_group);
}
return super.onPrepareOptionsMenu(menu);
}
根据您的需要,您需要在代码中的某个时刻将 mRemoveItem
设置回 false
。
我需要在菜单项的单击事件期间动态更改菜单项。
所以我在 activity.
中实现了 onOptionsItemSelectedpublic class ResultActivity extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main_actions, menu);
return true;
}
}
并且我在 onOptionsItemSelected 方法中调用 invalidateOptionsMenu,后者应该调用 onPrepareOptionsMenu
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id){
case R.id.action_group: {
invalidateOptionsMenu();
break;
}
}
}
此外,我正在尝试在 onPrepareOptionsMenu 方法中从菜单中删除一项。
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
Log.d(TAG,"In onPrepareOptionsMenu");
menu.removeItem(R.id.action_group);
Log.d(TAG,"Group icon is removed");
return super.onPrepareOptionsMenu(menu);
}
问题是,项目是在 activity 启动期间删除的,而不是等到相应的菜单项被单击时才被删除。
谁能告诉我问题出在哪里..TIA
问题是 onPrepareOptionsMenu(Menu)
无论如何都会被调用,只要您的菜单需要显示或重新加载。这包括来自 invalidateOptionsMenu()
的调用,也包括来自正在创建的 Activity 的调用。
例如,您可以在实际删除项目之前检查布尔状态。
public boolean mRemoveItem;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id){
case R.id.action_group: {
mRemoveItem = true;
invalidateOptionsMenu();
break;
}
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if (mRemoveItem) {
menu.removeItem(R.id.action_group);
}
return super.onPrepareOptionsMenu(menu);
}
根据您的需要,您需要在代码中的某个时刻将 mRemoveItem
设置回 false
。