我在为我的 Android 应用程序使用 parcelables 时遇到了一些问题。
我有一个名为 Transport
的自定义类,其中包含一堆 RoutePoint
- 从文件加载并保存在数组中的实例。
两个类 implements Parcelable
,因为我想传递 Transport
对象,其中包含 RoutePoint
多个 Activity 之间的对象。
这带来了一个问题,因为每个 RoutePoint
的内部对象,我有一个 Transport
用于告知哪个传输是 RoutePoint
的父对象的对象.
假装我有这些类(class):
Transport
:
public class Transport implements Parcelable
{
private RoutePoint[] points;
public Transport()
{
// Here the array is initialized
}
// Methods needed because of the Parcelable interface
}
RoutePoint
:
public class RoutePoint implements Parcelable
{
private Transport parent;
public RoutePoint(Transport parent)
{
this.parent = parent;
}
// Methods needed because of the Parcelable interface
}
当 Transport
类被写入 Parcel
, 我写了所有 RoutePoint
也是从阵列到包裹。
当 RoutePoint
类被写入 Parcel
,我写父Transport
也到包裹。
这会导致“递归调用”,以及 StackOverflowException
:
Transport
写一个RoutePoint
到Parcel
.RoutePoint
写父Transport
到Parcel
.- 家长
Transport
写一个RoutePoint
到Parcel
. - 回到第 2 步。
我想知道我怎样才能解决这个问题,并通过 Transport
在 Activity 之间上课,并传递 parent
RoutePoint
中的对象以某种方式上课。
最佳答案
如果所有 RoutePoint
实例始终包含在 Transport
实例中,您可以通过不序列化 RoutePoint.parent 来修复它,而是在反序列化 Transport 时设置它。
因此,当您反序列化 Transport 实例时,反序列化 RoutePoints,然后在这些 RoutePoint 实例上调用 setTransport
方法并设置父级。
关于java - 如何将包含 parcelable 类 'A' 实例的 Parcelable 类 'B' 的实例写入 'B' 类的 Parcel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29240354/