You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在双Fragment架构中使用ViewModel实现数据插入与RecyclerView展示?

你的实现方式完全正确!

你现在采用的「在Activity中初始化ViewModel,两个Fragment通过activityViewModels()获取同一实例」的方案,正是这种跨Fragment共享数据场景下的标准最佳实践,原因如下:

  • 保证数据一致性:两个Fragment依赖的是同一个ViewModel实例,第一个Fragment插入数据后,第二个Fragment观察的LiveData会立刻收到更新,RecyclerView能实时展示最新数据,不会出现两个Fragment数据不同步的问题。
  • 适配生命周期:ViewModel的生命周期与Activity绑定,比单个Fragment的生命周期更长。比如当Fragment因屏幕旋转、后台回收等原因销毁重建时,依然能拿到之前的ViewModel实例,数据不会丢失,UI状态也能快速恢复。
  • 代码职责更清晰:Activity负责ViewModel的初始化(包括传入Repository依赖),Fragment只需要专注于UI逻辑(插入数据的交互、RecyclerView的展示),避免了每个Fragment都去处理ViewModelFactory的重复代码,符合单一职责原则。

代码细节修正

看你给出的代码,大部分都是正确的,只有一个小细节需要修正:你的ViewModel中暴露的LiveData是articoli,但在SecondFragment的观察代码里写的是allWords,这会导致编译错误,需要改成:

articoliViewModel.articoli.observe(viewLifecycleOwner) { articolo->
    articolo.let { adapter.submitList(it) }
}

另外,确认你的ArticoliApplication已经正确初始化了Repository,并且在Activity的ViewModelFactory中正确传入,这部分你的代码已经做到了,完全没问题。

内容的提问来源于stack exchange,提问作者NiceToMytyuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 04:47:30