ViewPagerで表示されているFragmentによって、不要なActionBar Itemがある場合に非表示とする。
Itemオブジェクトの保存
MenuItem生成時に表示制御を行いたいItemをメンバとして記録しておく。lateinitで宣言すると、ViewPagerに渡した時にまだ初期化されていないので、Optionalで宣言する。
var icon:MenuItem? = null override fun onCreateOptionsMenu(menu: Menu?): Boolean { getMenuInflater().inflate(R.menu.main_item, menu); icon = menu!!.findItem(R.id.icon_item) return super.onCreateOptionsMenu(menu) }
ViewPager.addOnPageChangeListener
ViewPagerの切り替えイベントはaddOnPageChangeListener
に定義できる。このイベント定義で非表示にしたいFragmentが前面に来た場合、disableにすればよい。
viewPager.addOnPageChangeListener(object :ViewPager.OnPageChangeListener{ override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { //icon初期化済? icon?.let { //iconの表示初期化 it.setVisible(true) //表示されているFragmentの位置 val i = viewPager.currentItem //2つめのFragmentの表示時はiconを非表示 if(i == 1){ it.setVisible(false) } } } // must override methods override fun onPageScrollStateChanged(state: Int) {} override fun onPageSelected(position: Int) {}
リンク
リンク