【发布时间】:2017-07-01 21:00:46
【问题描述】:
我有一个简单的布局,其中一个主要的Activity、一个ViewPager 和一个带有4 个按钮的BottomNavigationView。点击每个按钮只会更改 ViewPager 上的当前项目,它会加载正确的 Fragment。
每个片段都有自己的android.support.v7.widget.Toolbar,我的目标是让每个片段在工具栏上显示不同的菜单项。我尝试了几种方法,但无法在工具栏中显示任何菜单项。这是我的代码:
Fragment.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_category, container, false);
Toolbar toolbar = (Toolbar) view.findViewById(R.id.main_toolbar);
toolbar.setTitle("Fragment title");
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.setSupportActionBar(toolbar);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_add"
android:enabled="true"
android:visible="true"
android:icon="@drawable/ic_add"
android:title="Add"
app:showAsAction="always" />
</menu>
Activity 本身没有菜单相关的代码。有什么我想念的想法吗?
【问题讨论】:
-
Toolbar与旧的Menu不同,它本身就是一个 ViewGroup。那么为什么不以编程方式将视图添加到每个片段的onCreateView()中的工具栏呢? -
例如获取
toolbar对象后,可以使用addView(childView)或setTitle(title)添加子视图 -
确实 - 刚刚意识到一个更简单的解决方案是直接调用 toolbar.inflateMenu(R.menu.menu)。
-
我建议你在Activity中使用一个工具栏,并在片段中根据需要更改该工具栏的菜单,就像whatsApp一样,你可以隐藏你的onCreateOptionsMenu上的菜单选项或者你可以应用新的菜单在这里。
标签: android toolbar android-toolbar