Android 无法为LiveData提供服务
我试图通过观察ViewModel中的LiveData来更新EditText中的值 以下是我试图更新EditText值的片段: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
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()
你是否在更新你的问题变量intMyProfileEditSharedViewModel
类?是的!但是,即使问题
(LiveData)没有被更新,我仍然不会得到“测试值”(初始值)在我的编辑文本中…我已经编辑了我的答案,请检查。如果您想将默认文本设置为etu-question
,您可以调用etu-question.setText(qnaQuestionData)
像以前一样。您是否正在更新question
变量intMyProfileEditSharedViewModel
类?是的!但是,即使question
(LiveData)未被更新,我仍然无法在编辑文本中获得“测试值”(初始值)…我已编辑了我的答案,请检查。如果您想将默认文本设置为et_question
,您可以像以前一样调用et_question.setText(qnaQuestionData)
。
private val communicationViewModel by lazy {
ViewModelProvider(requireActivity()).get(
MyProfileEditSharedViewModel::class.java
)
}