使用 Android 支持工具栏和不触​​发 onCreateOptionsMenu 的片段

Using Android support toolbar with fragments not triggering onCreateOptionsMenu

出现工具栏但没有菜单项。 如果我将代码移动到 activity,则会调用相应的 onCreateOptionsMenu。 如果我回到操作栏,片段版本工作正常。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.imd_toolbar);
    ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
    setHasOptionsMenu(true);

}

因为这个和更复杂的生命周期,我正在考虑无片段(顺便说一句,这里是 n00b),而且我真的不打算做平板电脑的特殊布局。 这仍然让我感到烦恼,这并没有发生在其他人身上,请让我知道这是已知的还是只是我的问题。

谢谢!

创建您的 menu 文件,如下所示:

sample_menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/menu_sms_ticket"
    android:title="@string/menu_sms_ticket"
    android:visible="false"/>
</menu>

在您的 activity 中添加此 menu 文件并更改代码以添加 toolbar,在您的 activity 中执行。在您的 fragment 中,调用 setHasOptionMenu(true) 并覆盖下面的函数,如下所示:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    menu.getItem(0).setVisible(true);
}

请试试这个让我知道这是否是你想要的。

我发现了问题。

更改此行:

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.imd_toolbar);

像这样:

Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.imd_toolbar);

示例:

Toolbar toolbar;
private View rootView;


rootView = inflater.inflate(R.layout.fragment_top_rated, container, false);
toolbar = (Toolbar) rootView.findViewById(R.id.tool_bar1);

我认为问题的原因是 getActivity() 在片段 returns 中 Activity 片段当前关联,而不是 view.