将parcelable类从片段传递到另一个activity

时间:2014-10-08 07:53:23

标签: android android-intent parcelable

我通常对parcelable没有任何问题,但这次我得到了NPE ......我无法修复它。请帮助我。

当我尝试将parcelable类从片段传递到另一个活动时,NPE仅 。如果我将parcelable类从活动传递到另一个活动或从活动传递到片段,那么工作正常。

这是我的片段代码,child(parcelable class)在调试时不为null:

if(v == imgChild)
{
    Intent i = new Intent(getActivity(), DetailChildActivity.class);
    i.putExtra("child", child);
    startActivity(i);
    Log.d("menu", "children");
}

此处在我的目标onCreate活动中:

Bundle data = getIntent().getExtras();
if(data != null)
{
    child = data.getParcelable("child"); //NPE here

    txtName.setText(child.getName());
}

这很奇怪。数据不为null,但parcelable始终为null。

这是我的parcelable(Child)类:

public final Parcelable.Creator<Child> CREATOR = new Parcelable.Creator<Child>() {
    public Child createFromParcel(Parcel in) {
        return new Child(in);
    }

    public Child[] newArray(int size) {
        return new Child[size];
    }
};

private Child(Parcel in) {
    id = in.readInt();
    user_id = in.readInt();
    name = in.readString();
    gender = in.readString();
    born_date = in.readString();
    born_hour = in.readString();
    hospital = in.readString();
    result = in.readString();
}

@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    // TODO Auto-generated method stub
    dest.writeInt(id);
    dest.writeInt(user_id);
    dest.writeString(name);
    dest.writeString(gender);
    dest.writeString(born_date);
    dest.writeString(born_hour);
    dest.writeString(hospital);
    dest.writeString(result);
}

这就是log cat所说的:

预期的com.blabla.child类型的接收器,但是为null

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

奇怪。我知道答案,但我不明白为什么。来自FragmentActivity NullPointer in onCreate savedInstanceState Bundle

public static final Parcelable.Creator

创作者应该处于静态和最终状态,而不仅仅是最终。多数民众赞成。

也许你可以向我解释一下这项工作如何,这就是现在的答案。