onCreateOptionsMenu 永远不会被调用工具栏膨胀

问题描述

我的片段类:

Toolbar toolbar;

@Override
public void onViewCreated(View view,@Nullable Bundle savedInstanceState) {
    toolbar =  getView().findViewById(R.id.toolbar3);
    toolbar.inflateMenu(R.menu.menufragmentmain);
    setHasOptionsMenu(true); //i also tried putting this function in oncreate function
}


@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
    Toast.makeText(getActivity(),"i never enter this function also",Toast.LENGTH_LONG).show();
    super.onCreateOptionsMenu(menu,inflater);
    inflater.inflate(R.menu.menufragmentmain,menu);
}

@Override
public boolean onoptionsItemSelected(MenuItem item) {
    Toast.makeText(getActivity(),"i never enter this function",Toast.LENGTH_LONG).show();
    //some switch cases.....
    return super.onoptionsItemSelected(item);
}

我有一个愚蠢的错误,我无法无情地找到。我的片段有一个简单的工具栏。在 onViewCreated 中,我用我的工具栏扩充了我的操作栏菜单。 问题是函数 onCreateOptionsMenu 和 'onoptionsItemSelected' 从未被调用。我不知道为什么。

我在其他类似问题中检查过的问题:

  • 我检查了我的主要活动是否有 onCreateOptionsMenu 或'onoptionsItemSelected'。它不会*t
  • 检查我的样式类是否没有:android:theme="@android:style/Theme.Black.NoTitleBar

这些要点都不起作用。我错过了什么。我需要检查其他东西吗?

解决方法

根据解释如何使用 Fragment 拥有的工具栏的 Fragment-owned app bar guide,您不要使用任何 setHasOptionsMenu()onCreateOptionsMenu() 或 { {1}} 个 API - 仅用于 Activity 拥有的应用栏。

相反,您可以使用 onOptionsItemSelected() API 来遵循 guide for handling menu click events

Toolbar
,

在主机 Activity 中设置工具栏。然后在必要时覆盖每个 Fragment 中的菜单处理。

这是一些通用的脚手架(带注释):

public class MyFragment extends Fragment {
  @Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Report that this Fragment has an options menu
    setHasOptionsMenu(true);
  }

  @Override
  public void onCreateOptionsMenu(@NonNull Menu menu,@NonNull MenuInflater inflater) {
    // Inflate then menu,and THEN call super()
    // Note the order of the invocations

    inflater.inflate(R.menu.my_menu,menu);

    super.onCreateOptionsMenu(menu,inflater);
  }

  @Override
  public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    // Handle menu item selections

    final int itemId = item.getItemId();

    switch(itemId) {
      case R.id.my_menu_option_x: ...; return true;
      case R.id.my_menu_option_y: ...; return true;
      case R.id.my_menu_option_z: ...; return true;
      default: return super.onOptionsItemSelected(item);
    }
  }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...