列表未在删除项目上显示(RxKotlin)

时间:2018-06-20 13:53:50

标签: android kotlin reactive-programming rx-kotlin

我正在使用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,然后,被删除的元素没有显示出来,应该是这样。因此,我认为问题在于删除某个项目时列表不会发出更改。

有人知道解决这个问题的方法吗?任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

在创建可观察列表时,应使用defer operator 。订阅后,它将返回刷新列表。