使用Android支持工具栏,片段不会触发onCreateOptionsMenu

时间:2016-08-17 07:50:14

标签: android android-fragments android-toolbar

出现工具栏但没有菜单项。 如果我将代码移动到活动,则会调用相应的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这里顺便说一句),而且我并不打算做平板电脑特殊布局。 仍然让我感到不安的是,其他人没有发生这种情况,请告诉我这是否已知或只是我的问题。

谢谢!

2 个答案:

答案 0 :(得分:0)

创建您的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);
}

如果这是你想要的,请试试这个让我知道。

答案 1 :(得分:0)

我发现了问题。

更改此行:

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()会返回片段当前与之关联的活动,而非查看