在 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 文件。 当然,但我无法弄清楚如何访问我需要操作的对象。我的MainActivityOnCreateOptionsMenu 需要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 中实现后退按钮

Android Fragment使用 Toolbar使用及Fragment中的Toolbar处理

从 Fragment 设置自定义 ActionBar 标题

Android Toolbar使用及Fragment中的Toolbar处理