Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
20
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

FragmentでActionBarを指定したい!

普通ハマらないと思うんですが、僕はなぜかハマってしまったので、備忘録として。

fragmentで画面作ったけど、Actionbar反映されないよ!なんでって方は、よければ参考にしてみてください。

ちなみにこれが参考になります。

【FragmentでActionBarを使うための3step!】

①onCreateViewの中のsetHasOptionsMenu(true)を選択

②onCreateOptionsMenuで、どのメニューを使うか指定

③onOptionsItemSelectedでメニューの処理を設定

さあ初めてみましょう。

①onCreateViewの中のsetHasOptionsMenu(true)を選択

javaのFragmentの中にonCreateViewというのがありますね。
そこに、setHasOptionsMenu(true);というのを追記します。

こんな感じです。

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setHasOptionsMenu(true);
    }

setHasOptionsMenは、OptionMenuを設定しますよって事です。
オプションメニューとは、アクションバーの右に出てくるやつですね。
setHasOptionsMenはお守りだと思ってください。

②onCreateOptionsMenu

次にメニューを設定してきます。大事なのは、inflater.inflate(R.menu.menu, menu);でinflateするわけですが、ここで設定するmenuです。resにmenuがあると思うので、そこを参照してみてください。つまり、この参照するmenuを変えれば、画面毎にoption menuの出し分けが出来るって事だと思う。(多分)

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.menu, menu);
        menu.findItem(R.id.menu_add).setVisible(true);
        menu.findItem(R.id.menu_share).setVisible(true);
    }

ちなみに今回設定したmenu.xmlは、例えばこんな感じ。showAsActionで表示非表示を設定します。
読み込んでないですが、多分ここらへんを参考にすればいいかと思います。
ちなみに種類だけは書いておきます。

android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]

<?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/menu_share"
        android:icon="@drawable/ic_share"
        android:title="Share"
        app:showAsAction="always"/>

    <item
        android:id="@+id/menu_add"
        android:icon="@drawable/ic_add_white_24dp"
        app:showAsAction="ifRoom"
        android:title="@string/add"/>
</menu>

③onOptionsItemSelectedで処理を設定

最後にonOptionsItemSelectedに処理を書いていきます。例えばこんな感じです。

@Override
public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {

        case R.id.menu_add:
            Toast.makeText(getActivity(), R.string.add, Toast.LENGTH_SHORT).show();
            break;

        case R.id.menu_share:
            Toast.makeText(getActivity(), R.string.share, Toast.LENGTH_SHORT).show();
            break;
    }
    return true;
}

とりあえず今回は、Toastでやってみました。res/values/stringsに文字は設定してくださいね。
これで、ActionBarの動作がjavaから指定できます。ActionBarも深いですね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
20
Help us understand the problem. What are the problem?