Android:将 List<GeoPoint> 传递给另一个 Activity

标签 android android-activity parcelable

我有一个 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/

相关文章:

动态加载图像的Android动画

android - 在不重新启动应用程序的情况下更改系统语言时,某些字符串不会被翻译

java - 具有多个 Activity 的 DialogFragment

android - 如何创建 Activity View

java - 无法通过 Intent 传递 Parcelable

Android:使用 Parcerable 将自定义对象的 ArrayList 从 fragment 发送到 Activity

android - 可在哪里/何时使用 describeContents()?

android - 在 Android JNI 中使用库头的问题

java - Android NDK 中的某些 C++ 包含文件不起作用

android - 保存android Activity 状态