Android 无法为LiveData提供服务

Android 无法为LiveData提供服务,android,kotlin,viewmodel,android-livedata,Android,Kotlin,Viewmodel,Android Livedata,我试图通过观察ViewModel中的LiveData来更新EditText中的值 以下是我试图更新EditText值的片段: private var qnaQuestionData: String = "TEST VALUE" private val communicationViewModel by lazy { ViewModelProvider(this).get( MyProfileEditSharedViewModel::c

我试图通过观察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>() }
}
类MyProfileEditSharedViewModel:ViewModel(){
val问题:惰性{MutableLiveData()}的MutableLiveData
}
当我运行此代码时,EditText的值被设置为“TEST value”,这意味着从未观察到LiveData。我怎样才能解决这个问题


谢谢大家!

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

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

et_question.setText(qnaQuestionData)

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

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

et_question.setText(qnaQuestionData)
我会将您的MyProfileEditSharedViewModel更改为这样

类MyProfileEditSharedViewModel:ViewModel(){
val问题:MutableLiveData=MutableLiveData()
}
你的碎片应该是这样的

class someFragment():Fragment(){
私有变量qnaQuestionData:String=“测试值”
私有val通信视图模型
get()=ViewModelProviders.of(activity!!).get(MyProfileEditSharedViewModel::class.java)
覆盖活动创建的乐趣(savedInstanceState:Bundle?){
super.onActivityCreated(savedInstanceState)
et_question.setText(qnaQuestionData)
communicationViewModel.question.postValue(“此消息将显示”)//
我会将您的MyProfileEditSharedViewModel更改为这样

类MyProfileEditSharedViewModel:ViewModel(){
val问题:MutableLiveData=MutableLiveData()
}
你的碎片应该是这样的

class someFragment():Fragment(){
私有变量qnaQuestionData:String=“测试值”
私有val通信视图模型
get()=ViewModelProviders.of(activity!!).get(MyProfileEditSharedViewModel::class.java)
覆盖活动创建的乐趣(savedInstanceState:Bundle?){
super.onActivityCreated(savedInstanceState)
et_question.setText(qnaQuestionData)
communicationViewModel.question.postValue(“此消息将显示”)//正在更改

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

解决了这个问题。 官方文件告诉我要把这个
改成
改变

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

解决了这个问题。
官方文件告诉我把
这个
改成
requireActivity()

你是否在更新你的
问题
变量int
MyProfileEditSharedViewModel
类?是的!但是,即使
问题
(LiveData)没有被更新,我仍然不会得到“测试值”(初始值)在我的编辑文本中…我已经编辑了我的答案,请检查。如果您想将默认文本设置为
etu-question
,您可以调用
etu-question.setText(qnaQuestionData)
像以前一样。您是否正在更新
question
变量int
MyProfileEditSharedViewModel
类?是的!但是,即使
question
(LiveData)未被更新,我仍然无法在编辑文本中获得“测试值”(初始值)…我已编辑了我的答案,请检查。如果您想将默认文本设置为
et_question
,您可以像以前一样调用
et_question.setText(qnaQuestionData)
private val communicationViewModel by lazy {
        ViewModelProvider(requireActivity()).get(
            MyProfileEditSharedViewModel::class.java
        )
    }