我正在使用Android应用程序。我有一张载入内存的照片列表。我想利用Reactive库,因此我声明了一个基于内存的数据源,用于保存列表:
where ora_rowscn between _last_scn_value_ and _current_scn_value_
然后,我有一个ViewModel在其中调用这些方法:
@Singleton
class MemoryPhotosSource @Inject constructor() {
var photos: MutableList<Image> = mutableListOf()
...
// Here is my function to add items to list.
fun addPhoto(image: Image) {
photos.add(image)
}
// Here is my function to list the items.
fun listPhotos(): List<Image> = photos
// Here is my function to remove items from list.
fun removePhoto(image: Image): Image {
photos.remove(image)
return image
}
}
最后,我订阅了我的应用程序:
class CreateDocumentFromPhotosViewModel @Inject constructor(): ViewModel() {
@Inject
lateinit var source: MemoryPhotosSource
fun listImages(): Observable<List<Image>> = Observable.fromCallable {
source.listPhotos()
}.applySchedulers()
fun addImage(image: Image) {
source.addPhoto(image)
}
fun removeImage(image: Image): Image {
source.removePhoto(image)
return image
}
}
列出和添加图像效果很好。但是,当我按在onDelete主题中发布的删除按钮时,将显示小吃栏,但对RecyclerView适配器未执行任何更改。调试时,我注意到 dis add viewModel.listImages()
.subscribe {
adapter.data = it
}
dis add onDelete
.map { viewModel.removeImage(it) }
.map { showSnackbar(parentView, resources.getString(R.string.document_removed), resources.getString(R.string.undo), it)}
.map { it.subscribe { viewModel.addImage(it) } }
.subscribe()
类中正在调用removePhoto
函数,并且列表已被成功修改。但是,它不会发出更改,因此未更新RecyclerView。我通过离开应用程序并再次输入来确认了此行为,这迫使重新粉刷Recycler,然后,被删除的元素没有显示出来,应该是这样。因此,我认为问题在于删除某个项目时列表不会发出更改。
有人知道解决这个问题的方法吗?任何帮助将不胜感激。
谢谢!