我有一个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中不断获得完全相同引用的原因。