【问题标题】:How to set the menu of a Toolbar inside a Fragment如何在片段内设置工具栏的菜单
【发布时间】: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


【解决方案1】:
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_category, container, false);
        Toolbar toolbar = (Toolbar) getactivity().findViewById(R.id.main_toolbar);
        ((ActionBarActivity)getActivity()).setSupportActionBar(mToolbar);
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }

【讨论】:

    【解决方案2】:

    尝试添加行

    AppCompatActivity activity = (AppCompatActivity) getActivity();
        activity.setSupportActionBar(toolbar);
    

    在片段的onActivityCreated

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      相关资源
      最近更新 更多