sharedViewModel, как получить доступ из Activity

#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> исправило это!