woshidan's blog

あいとゆうきとITと、とっておきの話。

FragmentでToolbarのMenuを使う

とある事情によりFragmentからToolbarのMenuを使いたくなりました。

Fragmentを使ってMenuを動的に作成する « Tech Booster

Android。フラグメントでアクションバーを使う。 - そごうソフトウェア研究所

上記の記事を参考にして試してみたのですが、現在ではなかなかうまくいかなくて、 結局、公式ドキュメントのAPIざーっと眺めて試した結果、うまくいったのは以下のような感じです。

Toolbar | Android Developers

package com.example.woshidan.fragmentmenutest;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

public class MainFragment extends Fragment {
    static final String LOGTAG = "MainFragment";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle) {
        View view =  inflater.inflate(R.layout.content_main, viewGroup, false);
        Toolbar toolbar = (Toolbar)view.findViewById(R.id.toolbar);
        toolbar.inflateMenu(R.menu.menu_main);
        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.action_settings:
                        Log.v(LOGTAG,"menu action_settings is pushed");
                        break;
                    default:
                        Log.v(LOGTAG,"menu others is pushed");
                        break;
                }
                return false;
            }
        });
        return view;
    }

    @Override
    public void onDestroyView() {
        Toolbar toolbar = (Toolbar)getView().findViewById(R.id.toolbar);
        toolbar.setOnMenuItemClickListener(null);
        super.onDestroyView();
    }
}