我正在使用James Montemagno的NavDrawer示例应用程序实现DrawerLayout导航,但我希望我的Fragments能够通过菜单加载,以便能够动态地将操作按钮添加到工具栏/ ActionBar中,以便它们显示为打开菜单的汉堡图标。我不知道该怎么做或者是否有可能。我该如何做到这一点?或者有更合适的方法吗?
答案 0 :(得分:0)
感谢Xamarin论坛上的@JamesMontemagno帮助我回答这个问题。以下是我必须做的工作:
https://forums.xamarin.com/discussion/comment/172433#Comment_172433
在我的Fragment的OnCreateView覆盖中,我需要在调用基本方法之前将HasOptionsMenu属性设置为true。
public override View OnCreateView(LayoutInflater inflater, Android.Views.ViewGroup container, Android.OS.Bundle savedInstanceState)
{
HasOptionsMenu = true;
base.OnCreateView(inflater, container, savedInstanceState);
...
}
然后我必须像这样重写OnCreateOptionsMenu和OnOptionsItemSelected ......
public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater)
{
base.OnCreateOptionsMenu(menu, inflater);
var filterActionItem = menu.Add(Menu.None, Resource.Id.toolbar_filter_action, Menu.None, new Java.Lang.String("Filter"));
MenuItemCompat.SetShowAsAction(filterActionItem, MenuItemCompat.ShowAsActionIfRoom);
}
public override bool OnOptionsItemSelected(IMenuItem item)
{
switch (item.ItemId)
{
case Resource.Id.toolbar_filter_action:
Toast.MakeText(Context, "Selected Item: " + item.TitleFormatted, ToastLength.Short).Show();
return true;
}
return base.OnOptionsItemSelected(item);
}
请注意,我创建了一个Ids.xml文件来存储我的菜单项ID,如此...
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<item name="toolbar_filter_action" type="id" />
</resources>
这允许我在menu.Add(...)方法中引用生成的toolbar_filter_action id。如果您有多个菜单项可以通过不同的片段添加,那么您将要将ID作为资源存储以便于重复使用,并通过OnOptionsItemSelected覆盖方法进行参考以确定哪个菜单/工具栏项点击了。