LiveData не срабатывает при обновлении базы данных комнаты - PullRequest
0 голосов
/ 24 мая 2018

У меня есть ViewPager с 2 фрагментами.Когда список обновляется для одного фрагмента, он должен отражать это изменение для другого фрагмента.

Вот так выглядят мои Dao методы для обновления

@Query("SELECT * FROM ${Constants.KAFANI_TABLE_NAME} WHERE isFavorite = 1")
fun getFavoriteKafani(): Single<MutableList<Kafana>>
@Query("UPDATE ${Constants.KAFANI_TABLE_NAME} SET isFavorite = :isFavorite WHERE id = :id")
fun setFavourite(id: Int, isFavorite: Int)

Затем я вызываю эти методы внутри моего repository

fun getFavoriteKafani(): Single<MutableList<Kafana>> {
    return kafanaDao.getFavoriteKafani()
}
fun setKafanaFavorite(kafana: Kafana, isFavorite: Int): Completable = Completable.fromCallable {
    kafanaDao.setFavourite(kafana.id, isFavorite)
}

My ViewModel

fun setFavorite(kafana: Kafana, isFavorite: Int) {
    compositeDisposable.addAll(kafanaRepository
            .setKafanaFavorite(kafana, isFavorite)
            .compose(scheduler.getSchedulersForCompletable())
            .subscribeBy(
                    onComplete = {
                        sendFavoriteUpdate(1)
                        Timber.d("${Constants.KAFANA_APP_TAG} Added as favorite ${kafana.name}")
                    },
                    onError = {
                        Timber.d("${Constants.KAFANA_APP_TAG} setFavorite onError ${it.localizedMessage}")
                    }
            ))

}

fun loadFavoriteKafani() {
    compositeDisposable.addAll(kafanaRepository
            .getFavoriteKafani()
            .compose(scheduler.getSchedulersForSingle())
            .subscribeBy(
                    onSuccess = {
                        if (it.isEmpty()) {
                            isFavoriteEmpty.set(true)
                            Timber.d("${Constants.KAFANA_APP_TAG} loadFavoriteKafani listIsEmpty")
                        } else {
                            kafaniList.value = it
                            isFavoriteEmpty.set(false)
                            Timber.d("${Constants.KAFANA_APP_TAG} loadFavoriteKafani listNotEmpty")
                        }
                    },
                    onError = {
                        isFavoriteEmpty.set(true)
                        Timber.d("${Constants.KAFANA_APP_TAG} loadFavoriteKafani OnError: $it.localizedMessage")
                    }))
}

И, наконец, в моем fragment

private fun getFavoriteKafani() {
    viewModel.loadFavoriteKafani()
    viewModel.kafaniList.observe(this, Observer<MutableList<Kafana>> {
        it?.let {
            sorted = it.sortedWith(compareBy({ !it.isSponsored }, { it.name })).toMutableList()
            kafanaAdapter = KafanaAdapter(sorted, this, 2)
            binder.rvKafani.adapter = kafanaAdapter
        }
    })
}

Но всякий раз, когда я устанавливаю kafana в качестве избранного в одном фрагменте, список не запускается в другом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...