Как сделать MutableLiveData <String>для запуска onChanged? - PullRequest
0 голосов
/ 20 февраля 2020

Помогите мне, пожалуйста.
Я хочу наблюдать за некоторой строкой, использующей LiveData.
OnChanged(), которая запускается один раз при запуске приложения, но когда я изменяю значение string1 нажатием кнопки, onChange() не срабатывает и информация не обновляется. TextView продолжает показывать «Вау»
Я делаю все в точности так, как описано здесь .
ViewModel:

class CurrentViewModel : ViewModel() {


val currentName: MutableLiveData<String> by lazy {
    MutableLiveData<String>()
}
}

Фрагмент:

class CurrentFragment : Fragment(R.layout.current_fragment) {
        private val viewModel: CurrentViewModel by viewModels()
       var string1 = "Wow!"

  override fun onActivityCreated(savedInstanceState: Bundle?)
       val nameObserver = Observer<String> { newName ->
            textview.text = newName        }
       viewModel.currentName.value = string1
       viewModel.currentName.observe(activity!!, nameObserver)


   button.setOnClickListener {
            string1 = "some new string"
        }
}

1 Ответ

2 голосов
/ 20 февраля 2020

Вы не обновляете значение viewModel.currentName, вы всегда должны обновлять значение MutableLiveData, чтобы уведомить наблюдателей.

Внутри вашего OnClickListener do:

button.setOnClickListener {
    // update viewModel value to notify listeners/observers
    viewModel.currentName.value = "some new string"
}

Obs: Вы можете удалить string1, поскольку это бесполезно!

...