У меня есть 2 пункта меню (кнопка фильтра и кнопка поиска), которые позволяют фильтровать или искать в списке. Когда элемент списка выбран, он передается в представление через LiveData viewModel, называемую listItemSelected
, когда это происходит, мы переходим от ListFragment
к DetailFragment
и скрываем 2 кнопки из меню, поскольку они не здесь не имеет значения.
Моя проблема связана с изменением конфигурации, например, с поворотом экрана, старая активность уничтожается, а новая функция Activity.onCreate()
вызывается до onCreateOptionsMenu()
, поэтому я не знаю как я могу правильно вернуть состояние меню.
Упрощенный пример кода ниже, прямо сейчас он просто cra sh на filterMenuItem.isVisible = it == null
, потому что filterMenuItem
на этом этапе не инициализирован.
class MyActivity : AppCompatActivity() {
private lateinit var viewModel: MyViewModel
private lateinit var filterMenuItem: MenuItem
private lateinit var searchMenuItem: MenuItem
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = getViewModel { injector.myViewModel }
viewModel.listItemSelected.observe(this, Observer {
filterMenuItem.isVisible = it == null
searchMenuItem.isVisible = it == null
})
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main_menu, menu)
menu!!.apply {
filterMenuItem = findItem(R.id.main_menu_filter)
searchMenuItem = findItem(R.id.main_menu_search)
}
return true
}