Android 在MutableLiveData列表中未观察到更改
我的存储库中有一个可变LiveData列表,如下所示:Android 在MutableLiveData列表中未观察到更改,android,android-studio,android-fragments,kotlin,Android,Android Studio,Android Fragments,Kotlin,我的存储库中有一个可变LiveData列表,如下所示: class AnswerRepository { private var _answerList = mutableListOf<Answer>() var answerList = MutableLiveData<MutableList<Answer>>() fun addAnswerInList(answer: Answer) { _answerList.ad
class AnswerRepository {
private var _answerList = mutableListOf<Answer>()
var answerList = MutableLiveData<MutableList<Answer>>()
fun addAnswerInList(answer: Answer) {
_answerList.add(answer)
answerList.value = _answerList
Log.e("AnswerRepository", "Answer List size : ${answerList.value?.size}")
Log.e("AnswerRepository", "_Answer List Size : ${_answerList.size}")
}
fun returnAnswerList(): MutableLiveData<MutableList<Answer>> {
return answerList
}
}
然后,在存储库和片段之间使用viewmodel在片段中观察此可变LiveData列表应答列表,如下所示:
class AnswerRepository {
private var _answerList = mutableListOf<Answer>()
var answerList = MutableLiveData<MutableList<Answer>>()
fun addAnswerInList(answer: Answer) {
_answerList.add(answer)
answerList.value = _answerList
Log.e("AnswerRepository", "Answer List size : ${answerList.value?.size}")
Log.e("AnswerRepository", "_Answer List Size : ${_answerList.size}")
}
fun returnAnswerList(): MutableLiveData<MutableList<Answer>> {
return answerList
}
}
视图模型:
class SendAnswerToCloudViewModel : ViewModel() {
private val answerRepository = AnswerRepository()
val answerList = answerRepository.returnAnswerList()
}
片段:
类SendAnswerToCloud:片段{
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding: FragmentSendDataToCloudBinding = DataBindingUtil.inflate(
inflater,
R.layout.fragment_send_data_to_cloud,
container,
false
)
binding.lifecycleOwner = this
viewModel.answerList.observe(viewLifecycleOwner, Observer {
Log.e("SendAnswerToCloud", "isChangeTrigerred")
val answer = viewModel.answerList.value?.last()
Log.e(
"SendAnswerToCloud",
"QuestionNumber : ${answer?.questionNumber}, SelectedOption : ${answer?.selectedOption}, QuestionStatus : ${answer?.questionStatus}"
)
})
return binding.root
}
}
在服务中调用addAnswerInListis时,该列表将在存储库中成功更新。但是,由于日志没有出现在logcat中,所以在片段中没有发生任何事情
那么,我做错了什么?任何形式的帮助都将不胜感激。提前谢谢 实现中的问题是实例化了两个AnswerRepository对象,而不是一个。因此,您将得到两个var answerList=MutableLiveDatathis val answer=viewModel.answerList.value?.last可以是它.last,因为列表正在传递给观察者对象。在服务中的MutableLiveData列表“answerList”中添加了一个项,如下所示,您在谈论什么服务?可能问题在于您创建了AnswerRepository的一个新实例,该实例创建了另一个MutableLiveData并在那里发布更新。如果你能在addItemInList中发布更多的代码,谢谢@JeneaVranceanu的评论。我更新了问题。谢谢@JeneaVranceanu!!实际上,我是android新手,我不明白我在哪里实例化了两个AnswerRepository对象。如果你能指出我在哪里创建了这两个实例,以及应该忽略哪一个,那将非常非常有帮助。再次感谢@伊克巴尔辛格,我已经更新了答案。请确保您熟悉编程中最重要的内容。我个人在Jet Brains Academy完成了Kotlin地图和部分基本地图:该资源对任何开始编程和学习Kotlin的人都非常有用。不过,他们将要求在2021年1月1日后付款。现在它是免费的,所以不要错过。嗨@JeneaVranceanu,非常感谢你的爱!
class FloatingWidgetService : Service(), View.OnClickListener{
private val answerRepository = AnswerRepository()
...
class SendAnswerToCloudViewModel : ViewModel() {
private val answerRepository = AnswerRepository()
...
}
class SendAnswerToCloudViewModel : ViewModel() {
private val answerRepository = AnswerRepository()
private val answerRepository_second = AnswerRepository()
...
}
class AnswerRepository private constructor() {
companion object {
private var INSTANCE: AnswerRepository? = null
fun getInstance(): AnswerRepository {
if (INSTANCE == null) {
INSTANCE = AnswerRepository()
}
return INSTANCE!!
}
}
private var _answerList = mutableListOf<Answer>()
var answerList = MutableLiveData<MutableList<Answer>>()
fun addAnswerInList(answer: Answer) {
_answerList.add(answer)
answerList.value = _answerList
Log.e("AnswerRepository", "Answer List size : ${answerList.value?.size}")
Log.e("AnswerRepository", "_Answer List Size : ${_answerList.size}")
}
fun returnAnswerList(): MutableLiveData<MutableList<Answer>> {
return answerList
}
}
private val answerRepository = AnswerRepository()
private val answerRepository = AnswerRepository.getInstance()