其他分享
首页 > 其他分享> > LiveData无法将数据从一个活动更新到另一个活动-Android

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