8

我有一个 GeoPoint 类型的 ArrayList。

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

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

4

1 回答 1

25

此功能将为您提供帮助: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());
}

代码应该可以工作,但未经测试。

于 2010-11-10T07:21:35.713 回答