我有一个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.writeToParcel。
这怎么可能?当我调用mStudent = args.getParcelable(" STUDENT")时,我不应该得到一个新的对象引用吗?
"参数&#34> bundle或Parcelable接口保留一些指向对象引用的链接,并使用parcel / unparceling作为最后的手段?
答案 0 :(得分:1)
This post指出,无法保证向/从Bundle写入/读取将导致parceling / unparceling。此外,它指出一个人不应该采取任何一种行为。这可能就是我继续在onCreate中找回完全相同的引用的原因。