我有一个 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 不是 Parcelable。那么,您可以在这里做一个解决方法:
1) 创建一个实现 Parcelable 的类:
public class ParcelableGeoPoint implements Parcelable { private GeoPoint geoPoint; public ParcelableGeoPoint(GeoPoint point) { geoPoint = point; } public GeoPoint getGeoPoint() { return geoPoint; } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeInt(geoPoint.getLatitudeE6()); out.writeInt(geoPoint.getLongitudeE6()); } public static final Parcelable.Creator<ParcelableGeoPoint> CREATOR = new Parcelable.Creator<ParcelableGeoPoint>() { public ParcelableGeoPoint createFromParcel(Parcel in) { return new ParcelableGeoPoint(in); } public ParcelableGeoPoint[] newArray(int size) { return new ParcelableGeoPoint[size]; } }; private ParcelableGeoPoint(Parcel in) { int lat = in.readInt(); int lon = in.readInt(); geoPoint = new GeoPoint(lat, lon); } }
2) 发送到其他 Activity 时(点是您的 List
ArrayList<ParcelableGeoPoint> pointsExtra = new ArrayList<ParcelableGeoPoint>(); foreach(GeoPoint point: points) { pointsExtra.add(new ParcelableGeoPoint(point)); } intent.putExtra("geopoints", pointsExtra);
3) 在调用的 Activity 中:
ArrayList<ParcelableGeoPoint> pointsExtra = getIntent().getParcelableArrayListExtra("geopoints"); ArrayList<GeoPoint> points = new ArrayList<GeoPoint>(); foreach(ParcelableGeoPoint point: pointsExtra) { points.add(point.getGeoPoint()); }
代码应该可以工作,但未经测试。
关于Android:将 List<GeoPoint> 传递给另一个 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4141944/