Android ViewPagerで表示されたFragmentによって、ActionBar Itemの表示を切り替える


ViewPagerで表示されているFragmentによって、不要なActionBar Itemがある場合に非表示とする。


f:id:letitride:20190717121045p:plainf:id:letitride:20190717121049p:plain


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) {}