我需要在菜单项的点击事件期间动态更改菜单项。
所以我在一项活动中实施了 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);
}
问题是,在活动启动期间删除了项目,而不是等到单击相应的菜单项。
有人能说出问题是什么.. TIA
答案 0 :(得分:1)
问题在于,无论何时需要显示或重新加载菜单,都会调用onPrepareOptionsMenu(Menu)
。这包括来自invalidateOptionsMenu()
的来电,也来自正在创建的活动。
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
。