Henrique
Henrique

Reputation: 5011

How to set the menu of a Toolbar inside a Fragment

I have a simple layout with one main Activity, a ViewPager and a BottomNavigationView with 4 buttons. Tapping on each button simply changes the current item on the ViewPager, which loads the correct Fragment.

Each fragment has their own android.support.v7.widget.Toolbar, and my goal is for each one to show different menu items on the Toolbar. I've tried several approaches but haven't been able to make any menu items show up in the Toolbar. This is my code:

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>

The Activity itself has no menu-related code. Any ideas what I'm missing?

Upvotes: 1

Views: 4279

Answers (2)

Naveen Tamrakar
Naveen Tamrakar

Reputation: 3339

@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);
    }

Upvotes: 1

Sony
Sony

Reputation: 7196

try adding the lines

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

in the fragment's onActivityCreated

Upvotes: 0

Related Questions