29
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FragmentでActionBarを指定したい!

Last updated at Posted at 2015-03-12

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

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も深いですね。

29
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?