我有一个 GeoPoint 类型的 ArrayList。
private List<GeoPoint> points = new ArrayList<GeoPoint>();
我想传递points
给另一个活动并检索该活动中的数据。我该怎么做?我知道我必须使用parcelable
但我搜索过,但找不到传递 ArrayLists 的方法。
我有一个 GeoPoint 类型的 ArrayList。
private List<GeoPoint> points = new ArrayList<GeoPoint>();
我想传递points
给另一个活动并检索该活动中的数据。我该怎么做?我知道我必须使用parcelable
但我搜索过,但找不到传递 ArrayLists 的方法。
此功能将为您提供帮助:http: //developer.android.com/reference/android/content/Intent.html#putParcelableArrayListExtra (java.lang.String , java.util.ArrayList<? extends android.os.Parcelable>)
但问题是,GeoPoint 不是 Parcelable。好吧,你可以在这里做一个解决方法:
1) 创建一个实现 Parcelable 的类:
公共类 ParcelableGeoPoint 实现 Parcelable { 私有 GeoPoint 地理点; 公共 ParcelableGeoPoint(GeoPoint 点) { 地理点=点; } 公共地理点 getGeoPoint() { 返回地理点; } 公共 int describeContents() { 返回0; } public void writeToParcel(Parcel out, int flags) { out.writeInt(geoPoint.getLatitudeE6()); out.writeInt(geoPoint.getLongitudeE6()); } 公共静态最终 Parcelable.Creator<ParcelableGeoPoint> CREATOR = 新 Parcelable.Creator<ParcelableGeoPoint>() { 公共 ParcelableGeoPoint createFromParcel(Parcel in) { 返回新的 ParcelableGeoPoint(in); } 公共 ParcelableGeoPoint[] newArray(int size) { 返回新的 ParcelableGeoPoint[size]; } }; 私人 ParcelableGeoPoint(包裹在){ int lat = in.readInt(); int lon = in.readInt(); geoPoint = new GeoPoint(lat, lon); } }
2)发送到其他活动时(点是您的 List<GeoPoint>:
ArrayList<ParcelableGeoPoint> pointsExtra = new ArrayList<ParcelableGeoPoint>(); foreach(GeoPoint 点:点){ pointsExtra.add(new ParcelableGeoPoint(point)); } intent.putExtra("geopoints", pointsExtra);
3)在被调用的活动中:
ArrayList<ParcelableGeoPoint> pointsExtra = getIntent().getParcelableArrayListExtra("geopoints"); ArrayList<GeoPoint> 点 = 新 ArrayList<GeoPoint>(); foreach(ParcelableGeoPoint 点:pointsExtra){ 点.add(point.getGeoPoint()); }
代码应该可以工作,但未经测试。