无法观察 LiveData

Cannot Obeserve LiveData

我正在尝试通过观察来自 ViewModel 的 LiveData 来更新 EditText 中的值。

这是我尝试更新 EditText 值的片段:

private var qnaQuestionData: String = "TEST VALUE"

private val communicationViewModel by lazy {
        ViewModelProvider(this).get(
            MyProfileEditSharedViewModel::class.java
        )
    }

override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        communicationViewModel.question.observe(viewLifecycleOwner, Observer {data ->
                data.let { qnaQuestionData = it }
        })

        et_question.setText(qnaQuestionData)

}

这是我的 ViewModel:

class MyProfileEditSharedViewModel : ViewModel() {
    val question: MutableLiveData<String> by lazy { MutableLiveData<String>() }
}

当我 运行 这段代码时,我的 EditText 的值被设置为“TEST VALUE”,这意味着从未观察到 LiveData。我该如何解决这个问题??

谢谢!

将呼叫et_question.setText(qnaQuestionData)移至观察者:

communicationViewModel.question.observe(viewLifecycleOwner, Observer { data ->
    qnaQuestionData = data
    et_question.setText(qnaQuestionData)
})

et_question.setText(qnaQuestionData)

I would change your MyProfileEditSharedViewModel to be like this

class MyProfileEditSharedViewModel : ViewModel() {
    val question: MutableLiveData<String>  = MutableLiveData()
}

and your fragment should be like this

class someFragment(): Fragment() {

    private var qnaQuestionData: String = "TEST VALUE"
    private val communicationViewModel
        get() = ViewModelProviders.of(activity!!).get(MyProfileEditSharedViewModel::class.java)

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        et_question.setText(qnaQuestionData)

        communicationViewModel.question.postValue("This Message will Show") //<------- for testing
        communicationViewModel.question.observe(this, Observer {
            qnaQuestionData = it
            et_question.setText(qnaQuestionData)
        })
    }
}

改变

private val communicationViewModel by lazy {
        ViewModelProvider(this).get(
            MyProfileEditSharedViewModel::class.java
        )
    }

private val communicationViewModel by lazy {
        ViewModelProvider(requireActivity()).get(
            MyProfileEditSharedViewModel::class.java
        )
    }

问题解决了。 官方文档告诉我将 this 更改为 requireActivity()