【发布时间】:2020-06-08 06:55:31
【问题描述】:
我的存储库中有一个 MutableLiveData 列表,如下所示:
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
}
}
在服务中的'answerList'(MutableLiveData 列表)中添加了一个项目,如下所示:
class FloatingWidgetService : Service(), View.OnClickListener{
private val answerRepository = AnswerRepository()
@SuppressLint("InflateParams")
override fun onCreate() {
super.onCreate()
//Getting the widget layout from xml using layout inflater
mFloatingView = LayoutInflater.from(this).inflate(R.layout.floating_widget, null)
initialiseViews()
setListeners()
}
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
override fun onClick(p0: View?) {
when (p0?.id) {
R.id.next -> {
addItemInList()
}
}
private fun addItemInList(){
val answer = Answer(questionNumber, selectedOption, questionStatus)
answerRepository.addAnswerInList(answer)
}
然后使用存储库和片段之间的视图模型在片段中观察到这个 MutableLiveData 列表 (answersList),如下所示:
视图模型:
class SendAnswerToCloudViewModel : ViewModel() {
private val answerRepository = AnswerRepository()
val answerList = answerRepository.returnAnswerList()
}
片段:
类 SendAnswerToCloud : Fragment() {
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
}
}
当在服务中调用addAnswerInList 时,列表在存储库中成功更新。然而,片段中什么也没有发生(因为日志没有出现在 logcat 中)。
那么,我做错了什么?任何形式的帮助将不胜感激。提前致谢!!
【问题讨论】:
-
这个
val answer = viewModel.answerList.value?.last()可能是it.last(),因为列表正在传递给观察者对象。 -
“在下面给出的服务中的 'answerList'(MutableLiveData 列表)中添加了一个项目”您在说什么服务?也许问题是您创建了一个
AnswerRepository的新实例,它创建了另一个MutableLiveData并在那里发布更新。如果您可以在fun addItemInList的位置发布更多代码。 -
感谢@JeneaVranceanu 的评论。我更新了问题。
标签: android android-studio android-fragments kotlin