我有2 Activity
即LiveData不會從一個活動更新數據到另一個活動 - 的Android
- 列表
Activity
- 詳細
Activity
列表Activity
顯示項和細節Activity
是列表在點擊列表中的項目時顯示。 在ListActivity
中,我們觀察到從數據庫中提取數據源,一旦我們完成,我們就更新UI。
列表頁面
feedViewModel.getFeeds().observe(this, Observer { feeds ->
feeds?.apply {
feedAdapter.swap(feeds)
feedAdapter.notifyDataSetChanged()
}
})
現在我們有一個DetailActivity
網頁,其中更新飼料(項目)和Activity
完成,但變化不會反映在ListActivity
。
詳細信息頁面
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
feedViewModel.setFeedId(id)
feedViewModel.updateFeed()
}
訂閱視圖模型
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
}
}
爲了簡化目的,一些代碼已經被抽象出來的。如果需要,我可以添加它們來跟蹤問題
我有完全相同的問題,但是我已經註釋了DB和DAO的實例作爲單例。你改變了什麼?順便說一句,我使用匕首2. 如果你想更多的信息在這裏是我發佈的問題:https://stackoverflow.com/questions/48267724/view-not-updating-after-first-time-triggering -livedata-時,使用背景在職 –