我有一个GeoPoint类型的ArrayList。

private List<GeoPoint> points = new ArrayList<GeoPoint>();

我想将points传递给另一个Activity并检索该Activity中的数据。我该怎么做?我知道我必须使用parcelable,但是我进行了搜索,但是找不到传递ArrayLists的方法。

最佳答案

该函数将帮助您:http://developer.android.com/reference/android/content/Intent.html#putParcelableArrayListExtra(java.lang.String,java.util.ArrayList )

但是问题是,GeoPoint无法打包。好吧,您可以在此处执行解决方法:

1)创建一个实现Parcelable的类:

公共(public)类ParcelableGeoPoint实现了Parcelable {

专用的GeoPoint geoPoint;

公共(public)ParcelableGeoPoint(GeoPoint点){
geoPoint =点;
}

公共(public)GeoPoint getGeoPoint(){
返回geoPoint;
}

public int describeContents(){
返回0;
}

公共(public)无效writeToParcel(打包,int标志){
out.writeInt(geoPoint.getLatitudeE6());
out.writeInt(geoPoint.getLongitudeE6());
}

公共(public)静态最终Parcelable.Creator 创建者
= new Parcelable.Creator (){
public ParcelableGeoPoint createFromParcel(Parcel in){
返回新的ParcelableGeoPoint(in);
}

公共(public)ParcelableGeoPoint [] newArray(int size){
返回新的ParcelableGeoPoint [size];
}
};

私有(private)ParcelableGeoPoint(包裹放入){
int lat = in.readInt();
int lon = in.readInt();
geoPoint =新的GeoPoint(lat,lon);
}
}

2)发送到其他 Activity 时(点是您的List :

ArrayList pointsExtra = new ArrayList ();
foreach(GeoPoint点:点){
pointsExtra.add(new ParcelableGeoPoint(point));
}
intent.putExtra(“geopoints”,pointsExtra);

3)在被叫 Activity 中:

ArrayList pointsExtra = getIntent()。getParcelableArrayListExtra(“geopoints”);

ArrayList 点=新的ArrayList ();

foreach(ParcelableGeoPoint point:pointsExtra){
points.add(point.getGeoPoint());
}

代码应该可以使用,但是未经测试。

10-07 19:27