android-fragments 为什么有些Bundle对象将通过引用更新,而有些则不会?

ccgok5k5  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(109)

我有一个片段,我在我的Activity中创建了一个新的Instance,同时我将一个Parcelable数据类传递给该片段,如下所示:

fun newInstance(
            use: User,
            date: Date
        ): CalendarDialogFragment {
            val fragment = MyFragment()
            val bundle = Bundle()
            bundle.putParcelable("user", user)
            bundle.putSerializable("date", date)
            fragment.arguments = bundle
            return fragment
        }

在片段中我想这样使用它:

var user =  arguments?.getParcelable("user")
var date =  arguments?.getSerializable("date")

这是一种向片段传递数据的正常方式。由于浅复制,当我更改此用户对象并更新其在片段中的字段时,包对象也将被更新。但对于某些对象,如Date(java.util)类型,则不会发生这种情况。例如,如果我将一个Date传递给片段并执行相同的操作,日期的bundle对象不会像用户对象那样更新,我想我在这里遗漏了什么!?

2o7dmzc5

2o7dmzc51#

这里你需要做一个用户的深度拷贝,也就是说,一个不拷贝引用的拷贝,但是实际上拷贝了引用所指向的对象。我认为你需要了解深度拷贝和浅拷贝。你可以在这里阅读What is the difference between a deep copy and a shallow copy?

相关问题