使用 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.
出现工具栏但没有菜单项。 如果我将代码移动到 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.