Предположим, что различные меню должны отображаться на панели инструментов действия с вкладками на разных вкладках.
Одним из решений является создание отдельного меню для каждого фрагмента / вкладки и раздувание при соответствующей функции onCreateOptionsMenu()
. Однако это решение оказалось медленным и запаздывающим. Menuicons не исчезает достаточно быстро.
Второе решение состоит в том, чтобы раздувать все menuicons в «активности» и затем прятаться при необходимости. Эта опция быстрее.
Я пробовал pageChangeListener
и tabSelectedListener
. Но как-то менюиконы не исчезали при первом нажатии. Они исчезают после щелчка по обеим скрывающим вкладкам в строке. Если используется invalidateOptionsMenu()
, менюиконы НЕ скрыты вообще.
У вас есть идея, почему это происходит? Или у вас есть другой быстрый способ скрыть значки?
Вот соответствующий код:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
Log.v("MainAct", "MainAct onCreateOptionsMenu")
menuInflater.inflate(R.menu.mainmenu, menu)
viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
when (position) {
0 -> {
menu!!.findItem(R.id.menuicon_contacts).isVisible = false
menu.findItem(R.id.menuicon_add).isVisible = false
invalidateOptionsMenu() // With this line menuicons does not disappear at all
}
1 -> {
menu!!.findItem(R.id.menuicon_contacts).isVisible = false
menu.findItem(R.id.menuicon_add).isVisible = false
invalidateOptionsMenu()
}
2 -> {
menu!!.findItem(R.id.menuicon_contacts).isVisible = true
menu.findItem(R.id.menuicon_add).isVisible = true
invalidateOptionsMenu()
}
}
}
})
return super.onCreateOptionsMenu(menu)
}