我已经在invalidateOptionsMenu()
上搜索了很多,我知道它能做什么。但是我想不出任何现实的例子,这种方法可能有用。
我的意思是说,例如,我们要向MenuItem
添加一个新的ActionBar
,我们可以简单地从onCreateOptionsMenu(Menu menu)
获取Menu并将其用于任何按钮的操作。
现在我真正的问题是,遵循使用invalidateOptionsMenu()
的唯一方法吗?
bool _OtherMenu;
protected override void OnCreate (Bundle bundle)
{
_OtherMenu = false;
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);
Button button = FindViewById<Button> (Resource.Id.myButton);
button.Click += delegate
{
if(_OtherMenu)
_OtherMenu = false;
else
_OtherMenu = true;
InvalidateOptionsMenu ();
};
}
public override bool OnCreateOptionsMenu (IMenu menu)
{
var inflater = this.SupportMenuInflater;
if(_OtherMenu)
inflater.Inflate (Resource.Menu.another_menu, menu);
else
inflater.Inflate (Resource.Menu.main_activity_menu, menu);
return base.OnCreateOptionsMenu (menu);
}
单击按钮,将出现另一个菜单。再次单击该按钮,出现上一菜单。
附言对不起,C#语法。
最佳答案
invalidateOptionsMenu()
用来表示Android,菜单内容已更改,应重新绘制菜单。例如,您单击一个在运行时添加另一个菜单项或隐藏菜单项组的按钮。在这种情况下,您应该调用invalidateOptionsMenu()
,以便系统可以在UI上重绘它。该方法是OS调用onPrepareOptionsMenu()
的信号,您可以在其中实现必要的菜单操作。
此外,在 Activity (片段)创建期间OnCreateOptionsMenu()
仅被调用一次,因此该方法无法处理运行时菜单更改。
都可以在documentation中找到: