2017-10-17 39 views
0

J'ai une liste d'objets que je mets à jour en temps réel (une fois par seconde). J'ai conçu mon application pour utiliser une architecture MVVM et la bibliothèque Android DataBindingMise à jour de la vue du recycleur avec des données en temps réel

J'ai lié le modèle de vue à la vue et tout se met bien à jour chaque fois que je recharge l'activité, mais est quand même là pour avertir le modèle de vue que le modèle les données ont été mises à jour et l'affichage a-t-il été mis à jour en conséquence en temps réel?

J'ai essayé d'implémenter l'interface BaseObservable et aussi ObservableFields mais j'ai toujours le même résultat.

peut-être quelques techniques RxJava je pourrais utiliser bien que je ne suis pas familier avec RxJava donc des pointeurs à des exemples résoudre un problème similaire serait utile

Merci

+0

consultez la bibliothèque [pagination] (https://developer.android.com/topic/libraries/architecture/paging.html), faites attention à 'LivePagedListProvider',' PagedListAdapter' et 'DataSource' (' TiledDataSource'/'KeyedDataSource') – pskink

+0

@pskink Merci pour la suggestion, le problème est que la bibliothèque de pagination fait partie de la nouvelle bibliothèque de composants d'architecture et je ne veux pas l'utiliser dans mon application, car il est encore à l'étape alpha – d199224

+0

urself, vérifiez ceci: https://mag.n26.com/reactive-clean-architecture-with-android-architecture-components-685a6682e0ca –

Répondre

0

Pour obtenir la vue de la mise à jour basée sur le changement ViewModel, vous juste besoin d'appeler notifyChange (si vous avez implémenté BaseObservable) ou notifyPropertyChange. Pour que ViewModel sache que le modèle a été mis à jour, vous pouvez utiliser RxJava ou implémenter votre propre interface onModelChanged.

Si vous utilisez un ContentProvider (et CursorLoader, par exemple), contentProviders peuvent également appeler getContext().getContentResolver().notifyChange(uri, null) de notifier que le modèle a changé (ce qui devrait aboutir à onLoadFinished() étant appelé à nouveau dans le ViewModel.