从片段的Arguments包中保存/检索parcelable时的对象引用

时间:2015-04-14 10:08:12

标签: android android-fragments

我有一个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作为最后的手段?

1 个答案:

答案 0 :(得分:1)

This post指出,无法保证向/从Bundle写入/读取将导致parceling / unparceling。此外,它指出一个人不应该采取任何一种行为。这可能就是我继续在onCreate中找回完全相同的引用的原因。