gpt4 book ai didi

android - onprepareoptionsmenu 默认被调用

转载 作者:行者123 更新时间:2023-11-30 02:22:42 24 4
gpt4 key购买 nike

我需要在菜单项的单击事件期间动态更改菜单项。

所以我在一个 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 的调用。

例如,您可以在实际删除项目之前检查 bool 状态。

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

关于android - onprepareoptionsmenu 默认被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28262138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com