LoginSignup
0
0

More than 1 year has passed since last update.

ToolbarのonCreateOptionsMenu()がFragmentから呼ばれないときの対処法

Posted at

一部のFragmentでのみ、とあるメニューを表示したかったのですが、メニューのvisiblityをうまくコントロールできず困りました。

というのも、ActivityからはonCreateOptionsMenu()やonPrepareOptionsMenu()が呼べるのに、Fragmentからは呼べませんでした。

すごくシンプルなのですが、

HogeFragment.kt
   override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        setHasOptionsMenu(true)
        (略)
    }

これだけでした。
setHasPotionsMenu(true)を呼べば、onPrepareOptionsMenu()やonCreateOptionsMenu()も呼ばれます。

    <item
            android:id="@+id/hoge"
            android:icon="@drawable/ic_hoge_24"
            android:title="@string/hoge_string"
            app:showAsAction="ifRoom"
            android:visible="false" />

あとはこんな感じでメニューをあらかじめ非表示にしておいて、表示したい特定のFragmentにおいて

HogeFragment.kt
    override fun onPrepareOptionsMenu(menu: Menu) {
        super.onPrepareOptionsMenu(menu)
        val item = menu.findItem(R.id.hoge)
        item.isVisible = true
        item.setOnMenuItemClickListener {
            // クリックリスナーも機能します
            return@setOnMenuItemClickListener true
        }
    }

こんな感じでvisibleをtrueにできます。

0
0
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
0
0