【发布时间】:2019-05-03 14:15:05
【问题描述】:
我是 Kotlin 和 ViewModel 使用的新手。 我正在尝试创建一个简单的 ViewModel,它有一个字符串列表。 这个想法是在这个 ViewModel 中更新一个图片路径(字符串)列表。
我的问题是我的 ViewModel 没有更新。它只添加 1 个条目。
class PicturesViewModel : ViewModel() {
var pictureListLive: MutableLiveData<MutableList<String>> = MutableLiveData()
var list = ArrayList<String>()
fun addPictureToList(picture: String) {
list.add(picture)
pictureListLive.value = list
}
}
在我的活动中,我初始化了 viewModel 并像这样观察:
private fun configureViewModel(){
this.picturesViewModel = ViewModelProviders.of(this).get(PicturesViewModel::class.java!!)
this.picturesViewModel.pictureListLive.observe(this, Observer{
if (it != null) {
Log.i("Pictures",it.size.toString())
}
})
}
我在 ViewModel 中添加了一个字符串:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_IMAGE_CAPTURE) {
picturesViewModel.addPictureToList(currentPhotoPath)
val intentPreview = Intent(this,PreviewActivity::class.java)
intentPreview.putExtra("Picture",currentPhotoPath)
startActivity(intentPreview)}
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CHOOSE_PHOTO){
this.pictureSelectedPath = data?.data.toString()
Log.i("Photo",pictureSelectedPath)
}
}
ActivityOnResult 来自于对相机拍照后。我想更新 ViewModel 的 String 列表,在拍几张照片后添加图片相机路径。
当我今天这样使用它时,ViewModel 列表的大小仍然为 1。我认为只有最后一个在其中。
感谢您的帮助。
【问题讨论】:
-
你能把代码传递给你正在初始化视图模型的片段/活动吗?
-
您的代码没有任何意义。我建议您在开始编写任何代码之前阅读更多关于 Kotlin 和视图模型的使用、
LiveData等的内容。 -
与问题相关的注释,但这是我对您的代码的建议> 首先您的
setPictureList()不应该有返回值,其次您的getPictureList()应该返回LiveData而不是MutableLiveData。您可以在getPictureList()中删除此代码pictureListLive.value = pictureList。