在 Fragment 中向 ActionBar 添加项目
Posted
技术标签:
【中文标题】在 Fragment 中向 ActionBar 添加项目【英文标题】:Adding items to ActionBar in a Fragment 【发布时间】:2014-12-15 19:10:03 【问题描述】:我试图弄清楚如何通过Fragment
将项目添加到ActionBar
菜单。我的应用程序的MainActivity
继承了ActionBarActivity
,我希望能够根据Fragment
当前显示的内容更改ActionBar
上的项目。
public class LoginFragment : BaseFragment
//...
public override void OnCreate(Bundle savedInstanceState)
base.OnCreate(savedInstanceState);
SetHasOptionsMenu(true);
// this.Activity.MenuInflater.Inflate(Resource.Menu.something, ???);
【问题讨论】:
为什么不为这项工作扩充 .xml 文件。 当然,但我无法弄清楚如何访问我需要操作的对象。我的MainActivity
的OnCreateOptionsMenu
需要IMenu
的参数。这是哪里来的?
您可以创建一个自定义函数并在活动中进行全局引用,它将在 onCreateMenu 中初始化
您只需从活动中的任何位置调用该函数
【参考方案1】:
复制自here
1. Remove or comment any onOptionsItemSelected() ,onMenuItemSelected() even onPrepareOptionMenu() and leave in Activity onCreateOptionsMenu() only:
@Override
public boolean onCreateOptionsMenu(Menu menu)
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.layout.menu, menu);
return true;
在 Fragment 类中,在 onCreateView() 中,放入:
setHasOptionsMenu(true);
在 Fragment 类中添加:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
super.onCreateOptionsMenu(menu,inflater);
@Override
public boolean onOptionsItemSelected(MenuItem item)
switch(item.getItemId())
case R.id.action_insert:
//doing stuff
return true;
return false;
在 android 4.4 上测试并运行
【讨论】:
啊,我试图找到 onCreateOptionsMenu 的覆盖。我没有意识到它为 Fragments 返回了 void。以上是关于在 Fragment 中向 ActionBar 添加项目的主要内容,如果未能解决你的问题,请参考以下文章
在通过 ActionBar 添加的 Fragment 上调用 addToBackStack()
如何在Fragment中使用Actionbar-Android开发问答
Android Studio:如何从 Fragment 在 ActionBar 中实现后退按钮