【问题标题】:Adding items to ActionBar in a Fragment在 Fragment 中向 ActionBar 添加项目
【发布时间】: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 中初始化
  • 您只需从活动中的任何位置调用该函数

标签: c# android menu android-actionbar fragment


【解决方案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;
    }
  1. 在 Fragment 类中,在 onCreateView() 中,放入:

    setHasOptionsMenu(true);
    
  2. 在 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。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 2014-02-17
相关资源
最近更新 更多