从片段的参数包中保存/检索可包裹的对象引用



我有一个StudentList片段,它有一个List;Student类实现Parcelable;单击StudentList片段中的项目将调用以下StudentFragment:

public static StudentFragment newInstance(Student student_) {
StudentFragment fragment = new StudentFragment();
Bundle args = new Bundle();
args.putParcelable("STUDENT", student_);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
if (args != null) {
mStudent = args.getParcelable("STUDENT");
}
}
private void setStudentName(String newName_) {
mStudent.setName(newName_);
}

这个片段是从另一个"StudentList"片段实例化的,该片段有一个List;他的列表中的一个对象作为参数提供给StudentFragment.newInstance().

我惊讶地发现,"StudentFragment"中对mStudent的任何更改都会自动反映在相应的对象上。在进一步检查StudentFragment的onCreate方法时,我发现mStudent对象引用与传递给newInstance的对象的引用相同。

当我遍历代码时,我发现Student.writeToArcel从未被调用。

这怎么可能?当我调用mStudent=args.getParcelable("STUDENT")时,我不应该得到一个NEW对象引用吗?

"arguments"捆绑包或Parcelable接口是否保留了到对象引用的某些链接,并将包裹/取消包裹作为最后手段?

这篇文章指出,不能保证向Bundle写入/从Bundle读取会导致分组/取消分组。此外,它还指出,一个人不应该采取任何一种行为。这可能就是我在onCreate中不断获得完全相同引用的原因。

最新更新