Android 在MutableLiveData列表中未观察到更改

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

我的存储库中有一个可变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
    }
}
然后,在存储库和片段之间使用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()