#android #kotlin #fragment #viewmodel
#Android #kotlin #фрагмент #viewmodel
Вопрос:
У меня проблема с моим фрагментом и ViewModel. Это код в моем фрагменте:
private val sharedViewModel: SharedViewModel by activityViewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
alarm.setOnClickListener {
sharedViewModel.alarmState.value = AlarmState.Activated
}
sharedViewModel.alarmState.observe(viewLifecycleOwner, { Observer<AlarmState> {
when(it){
AlarmState.Activated -> {
text_alarm.text = "Alarmanlage aktiviert"
alarm.setBackgroundResource(R.drawable.border_image_red);
alarm.setImageResource(R.drawable.alarmanlage_an)
}
AlarmState.GetsActivated ->{
text_alarm.text = "Alarmanlage wird aktiviert"
alarm.setBackgroundResource(R.drawable.border_image_orange);
alarm.setImageResource(R.drawable.alarmanlage_aus)
}
AlarmState.Deactivated ->{
text_alarm.text = "Alarmanlage aus"
alarm.setBackgroundResource(R.drawable.border_image_green);
alarm.setImageResource(R.drawable.alarmanlage_aus)
}
}
}
})
и это моя ViewModel
class SharedViewModel:ViewModel(){
var alarmState: MutableLiveData<AlarmState> = MutableLiveData<AlarmState>(Deactivated)
}
таким образом, состояние тревоги изначально деактивировано.
нажатие на «alarm» устанавливает состояние в активированное.
Разве теперь AlarmState-observer не должен запускаться и выполняться?
Что я делаю не так?
Большое спасибо
Комментарии:
1. Можете ли вы показать, как
AlarmState
это реализовано?2. удалите лишнее
Observer<AlarmState> { }
, оно должно бытьsharedViewModel.alarmState.observe(viewLifecycleOwner, { code })
илиsharedViewModel.alarmState.observe(viewLifecycleOwner) { code }
что одно и то же3. Большое спасибо IR42, удаление Observer<AlarmState> исправило это!