普通ハマらないと思うんですが、僕はなぜかハマってしまったので、備忘録として。
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も深いですね。