无法观察 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()
我正在尝试通过观察来自 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()