LiveData无法将数据从一个活动更新到另一个活动-Android
作者:互联网
我有2个活动,即
>列表活动
>详细活动
活动列表显示项目列表,而详细信息活动在单击列表中的项目时显示.
在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
}
}
为了简单起见,已经对一些代码进行了抽象.如果需要,我可以添加它们以跟踪问题
解决方法:
经过大量调查并从另一个问题中获得了this answer的一些想法.我发现了问题.
问题
DatabaseCreator(application).database.feedDao()并未创建数据库的单例实例,因为第一个Activity具有另一个实例,其中LiveData正在监听更改,而第二个Activity具有另一个实例,在更新数据后,该回调被忽略.
解
使用Dagger或任何其他依赖项注入可确保仅创建DB和DAO的单个实例.
标签:android-room,android-architecture-components,android-livedata,android 来源: https://codeday.me/bug/20191025/1931709.html