Как скрыть пункт меню при заданной вкладке c, активности вкладок, Kotlin - PullRequest
0 голосов
/ 08 марта 2020

Предположим, что различные меню должны отображаться на панели инструментов действия с вкладками на разных вкладках.

Одним из решений является создание отдельного меню для каждого фрагмента / вкладки и раздувание при соответствующей функции 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)
}

1 Ответ

0 голосов
/ 08 марта 2020
var menu1 : Boolean = true

метод onCreate:

viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {

    override fun onPageSelected(position: Int) {
        when (position) {
            0 -> {
                menu1 = true
                invalidateOptionsMenu() 
            }
            1 -> {
                menu1 = true
                invalidateOptionsMenu()

            }
            2 -> {
                menu1 = false
                invalidateOptionsMenu()

            }
        }
    }

})

методы переопределения:

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
if(menu1){
   menuInflater.inflate(R.menu.mainmenu1, menu)
}else{
   menuInflater.inflate(R.menu.mainmenu2, menu)
}

return super.onCreateOptionsMenu(menu)
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {
        R.id.menuicon_contacts -> {
            // your code
            return true
        }
        R.id.menuicon_add -> {
            // your code
            return true
        }
    }
    return super.onOptionsItemSelected(item)
}
...