我创建了以下菜单项,并且始终显示为一个操作,而不是隐藏在溢出菜单中。
<item android:id="@+id/menu_refresh_network"
android:orderInCategory="100"
android:icon="@drawable/ic_menu_action_refresh_network"
android:title="@string/title_refresh_network"
android:enabled="true"
app:showAsAction="always" />
当 ThreshVoteIntentService.mOpportunistic
为 TRUE
时,我需要隐藏它。我有一个接收器,当该值发生变化时,它会按 Intent 发出警报。这是使菜单无效的一个非常简单的过程。
IntentFilter filterModeUpdated = new IntentFilter(resources.getString(R.string.action_mode_updated));
mModeUpdatedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
invalidateOptionsMenu();
}
};
this.registerReceiver(mModeUpdatedReceiver, filterModeUpdated);
我有我的选项菜单,然后(据说)在 onPrepareOptionsMenu
中重绘。
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
menu.findItem(R.id.menu_refresh_network).setVisible(ThreshVoteIntentService.mOpportunistic);
return super.onPrepareOptionsMenu(menu);
}
实际情况是menu_refresh_network
的可见性仅在我打开溢出菜单时发生变化。我是否基本上误解了它应该如何工作?
最佳答案
onPrepareOptionsMenu() 只在显示溢出菜单之前被调用,所以为时已晚。
您需要在正确的 MenuItem 上调用 setVisible(false) before 使选项菜单无效。因此,在您的 onCreateOptionsMenu() 中,使用 findItem() 找到对 MenuItem 的引用对于要更改的项目 ID 并将其存储在成员变量中。然后,当广播到达时,更改该项目的可见性,然后使选项菜单无效。
这是一个示例 Activity ,它基于我在 Android Studio 中创建的一个新项目来演示这一点。如果你运行这个,你可以看到菜单项在 5 秒后消失,甚至不需要 invalidate 来强制刷新菜单。
public class MainActivity extends AppCompatActivity {
private MenuItem menuItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// Hide the menu item in 5 seconds
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
menuItem.setVisible(false);
}
}, 5000);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
menuItem = menu.findItem(R.id.action_settings);
MenuItemCompat.setShowAsAction(menuItem, MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
return true;
}
}
关于android - 试图在 Android 中隐藏菜单项,但行为不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35532083/