如何传递包含另一个 Parcelable 类列表的 Parcelable 类?
Posted
技术标签:
【中文标题】如何传递包含另一个 Parcelable 类列表的 Parcelable 类?【英文标题】:How to pass a Parcelable class which contains a list of another parcelable class? 【发布时间】:2021-07-10 23:24:05 【问题描述】:我正在尝试将 Parcelable 类从一个 Activity 传递到另一个 Activity。我是这样做的:
Intent intent = new Intent(ClosedChatActivity.this, AdminProfileActivity.class);intent.putExtra("adminProfile", adminProfile);
startActivity(intent);
然后像这样在另一个 Activity 中获取它:
adminProfile = (AdminProfile) getIntent().getExtras().getParcelable("adminProfile");
这是 AdminProfile 类和它内部的 WebLink 类:
public class AdminProfile implements Parcelable
public static final Creator<AdminProfile> CREATOR = new Creator<AdminProfile>()
@Override
public AdminProfile createFromParcel(Parcel in)
return new AdminProfile(in);
@Override
public AdminProfile[] newArray(int size)
return new AdminProfile[size];
;
public Long idUser;
public String name;
public String professio;
public String description;
public List<WebLink> webLinks;
public Long idOficina;
protected AdminProfile(Parcel in)
idUser = in.readLong();
name = in.readString();
professio = in.readString();
description = in.readString();
webLinks = in.createTypedArrayList(WebLink.CREATOR);
idOficina = in.readLong();
@Override
public int describeContents()
return 0;
@Override
public void writeToParcel(Parcel parcel, int i)
parcel.writeLong(idUser);
parcel.writeString(name);
parcel.writeString(professio);
parcel.writeString(description);
parcel.writeLong(idOficina);
parcel.writeTypedList(webLinks);
public class WebLink implements Parcelable
public static final Creator<WebLink> CREATOR = new Creator<WebLink>()
@Override
public WebLink createFromParcel(Parcel in)
return new WebLink(in);
@Override
public WebLink[] newArray(int size)
return new WebLink[size];
;
public String name;
public String url;
protected WebLink(Parcel in)
name = in.readString();
url = in.readString();
@Override
public boolean equals(@Nullable Object obj)
WebLink webLink = (WebLink) obj;
assert webLink != null;
return this.name.equals(webLink.name) && this.url.equals(webLink.url);
@Override
public int describeContents()
return 0;
@Override
public void writeToParcel(Parcel parcel, int i)
parcel.writeString(name);
parcel.writeString(url);
当我得到对象时,其中的两个字符串与我发送的不同。这是为什么呢?
奇怪的是,我有另一个包含 AdminProfile 的 Parcelable 类,当发送该类时,它确实可以发送包含 Weblinks 的良好,但如果我只发送一个 AdminProfile,它会失败。
【问题讨论】:
删除了android-studio
标签,因为该标签用于解决有关 Android Studio 产品的问题。您的问题是一个通用的 Android 问题,与 Android Studio 无关。
【参考方案1】:
在读写Parcelable
类时,需要确保元素的顺序完全一致。
您正在编写idOficina
,然后是WebLinks
,但您正在以相反的顺序阅读它们。
【讨论】:
以上是关于如何传递包含另一个 Parcelable 类列表的 Parcelable 类?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用包含 Hashmap 和 SparseArray 的自定义类实现 parcelable?
***Error关于为android中的类编写Parcelable