虽然我已经找到了解决这个问题的方法(见结尾(,但我很想知道是否有更好的方法。我很难用谷歌找到答案,因为我不知道如何正确地表达这个问题,所以如果这个问题已经得到了回答:我很抱歉,你能提供一个链接吗。我正在使用基于各种在线初学者教程的标准MVVM设置,其中包括:房间数据库、存储库、带有对象的LiveData列表的DAO、ViewModel和RecyclerView.Adapter。
我有两个片段,A和B。片段A包含一个项目的recyclerView,而片段B在点击recyclerView中的一个项目时被提前以启用编辑。为了填充片段B的视图,我使用RecyclerView.Adapter类的getItem((方法(它对我的对象列表C执行get((用(来创建一个对象,即对象D。这使我可以根据需要在片段B周围传递对象D。
关于问题:我发现,如果我对这个对象D进行任何更改,这些更改都会被传递到列表C。这意味着,如果我更改对象D,然后留下片段B,而不尝试保存更改,片段A会显示所做的更改。这是有问题的,因为它给用户的印象是更改已保存,但底层数据库尚未更新,只有LiveData列表C.
我的解决方法:这种方法有效,但我认为还有更好的解决方案。当片段B被提出时,我使用RecyclerView.Adapter类的getItem((方法创建一个临时对象,即对象E。然后,我使用对象E的getter方法创建对象D。我的猜测是getItem((方法返回的是对LiveData对象的引用(或其他东西(,而不是对象的副本,但我真的不知道。
我希望这是有道理的,如果你还需要我做什么,请告诉我。
感谢Mohammed Alaa的重定向:https://stackoverflow.com/a/62364317/9046317:本质上,对象引用是通过值传递的。