我已经在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中找到:

08-26 00:42