如何在双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
相关产品推荐
相关产品推荐

