J'ai 2 Activity
savoirLiveData pas la mise à jour des données d'une activité à une autre activité - Android
- Liste
Activity
- Détail
Activity
La liste Activity
montre la liste des articles et des détails Activity
est- montré en cliquant sur un élément de la liste. Dans le ListActivity
, nous observons l'extraction des flux à partir de la base de données et une fois que nous le faisons, nous mettons à jour l'interface utilisateur.
page Liste
feedViewModel.getFeeds().observe(this, Observer { feeds ->
feeds?.apply {
feedAdapter.swap(feeds)
feedAdapter.notifyDataSetChanged()
}
})
Maintenant, nous avons une page DetailActivity
qui met à jour l'alimentation (point) et Activity
est terminé, mais les modifications ne sont pas dans le ListActivity
.
Détails Page
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
feedViewModel.setFeedId(id)
feedViewModel.updateFeed()
}
Mode Modèle
class FeedViewModel(application: Application) : AndroidViewModel(application) {
private val feedRepository = FeedRepository(FeedService.create(getToken(getApplication())),
DatabaseCreator(application).database.feedDao())
/**
* Holds the id of the feed
*/
private val feedId: MutableLiveData<Long> = MutableLiveData()
/**
* Complete list of feeds
*/
private var feeds: LiveData<Resource<List<Feed>>> = MutableLiveData()
/**
* Particular feed based upon the live feed id
*/
private var feed: LiveData<Resource<Feed>>
init {
feeds = feedRepository.feeds
feed = Transformations.switchMap(feedId) { id ->
feedRepository.getFeed(id)
}
}
/**
* Get list of feeds
*/
fun getFeeds() = feeds
fun setFeedId(id: Long) {
feedId.value = id
}
/**
* Update the feed
*/
fun updateFeed() {
feedRepository.updateFeed()
}
/**
* Get feed based upon the feed id
*/
fun getFeed(): LiveData<Resource<Feed>> {
return feed
}
}
Pour des raisons de simplicité du code a été abstraire. Si nécessaire, je peux les ajouter pour tracer le problème
J'ai exactement le même problème, mais j'ai annoté l'instance de la DB et les DAO comme singletons. Qu'avez-vous changé? En passant, j'utilise Dagger 2. Si vous voulez plus d'informations, voici la question que j'ai posté: https://stackoverflow.com/questions/48267724/view-not-updating-after-first-time-triggering -livedata-when-using-background-job –