2015年3月21日土曜日

FragmentのonCreateOptionsMenuでMenuを追加するときの注意点


あるFragmentを持つActivityがあるとする。
Menuの追加処理は必ずしもActivityだけではなくてFragment側でもonCreateOptionsMenuをオーバライドしてやればできる。
これを利用すると、Fragmentの切り替え時にそのFragmentに合ったMenuを表示することができる。

そのときの注意点。

ダメな例
 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.main, menu);
}

正しい例
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    if(!menu.hasVisibleItems())
        inflater.inflate(R.menu.main, menu);
}
menu.hasVisibleItems()で既にmenuがあることを確認しないと、FragmentがaddされたときにMenuがどんどん増えてしまう。
addする前にremoveしていれば既に追加したMenuは消えてくれるが、removeせずにaddを呼ぶ場合などは注意が必要。


0 件のコメント:

コメントを投稿