кого нибудь похожее?
в методе onCreateView создаю ViewModel, которая в при инициализации считывает данные и грузит их в лайвдату. Листенер устанавливаю, очевидно, после создания вьюмодели. Эта лайвдата передает фрагменту информацию про состояние (активное/неактивное) иконки в меню. Эта иконка объявлена как lateinit var и бывают моменты, когда прилетает лайвдата, а менюайтем почему то не инициализирован. Снизу сокращенный код того что у меня
class MyFragment : Fragment() {
private lateinit var viewModel: MyViewModel
private lateinit var menuItemCheck: MenuItem
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
setHasOptionsMenu(true)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
setOnIsCheckActiveChangeListener()
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_new_note, menu)
menuItemCheck = menu.findItem(R.id.menuItem_check)
}
private fun setOnIsCheckActiveChangeListener() {
viewModel.isCheckActiveLiveData.observe(viewLifecycleOwner) {
menuItemCheck.isEnabled = it // Тут кидает иногда UninitializedPropertyAccessException
}
}
}
Как такое может получаться, если данные фрагмент получает только в активном состоянии, а инициализация меню происходит точно раньше?
а можна закидывать код на hatebin?
можешь кидать, никто не запрещал
это был риторический вопрос к вам)
Я понял :) Но опыт показывает, что редко кто переходит на вопросы с ссылкой еще куда то. Личные наблюдения
Все, что связано с View, делается в onViewCreated()
Обсуждают сегодня