Android:通过列表<;地质点>;参加另一项活动
我有一个GeoPoint类型的数组列表Android:通过列表<;地质点>;参加另一项活动,android,android-activity,parcelable,Android,Android Activity,Parcelable,我有一个GeoPoint类型的数组列表 private List<GeoPoint> points = new ArrayList<GeoPoint>(); private List points=new ArrayList(); 我想将点传递给另一个活动并检索该活动中的数据。我该怎么做?我知道我必须使用包裹,但我搜索了,但找不到传递ArrayList的方法。此函数将帮助您:,java.util.ArrayList非常感谢。我正试图弄明白这段代码中什么是MyParce
private List<GeoPoint> points = new ArrayList<GeoPoint>();
private List points=new ArrayList();
我想将
点
传递给另一个活动并检索该活动中的数据。我该怎么做?我知道我必须使用包裹
,但我搜索了,但找不到传递ArrayList的方法。此函数将帮助您:,java.util.ArrayList非常感谢。我正试图弄明白这段代码中什么是MyParcelable
?哦,对不起。我错了!MyParcelable不在我使用的developer.android.com上的示例中。MyParcelable应替换为上面的ParcelableGeoPoint.:)刚刚编辑以更正帖子。:)谢谢。好的,您还应该在ParcelableGeoPoint(Parcel in)中更改int long
,再次感谢。传递字符串列表更容易。但有点不同。查看Intent函数Intent.putStringArrayListExtra(…)和Intent.getStringArrayListExtra(…)。它们就是你所需要的。没有额外的类。@PatrickBoos有什么特殊的理由不扩展GeoPoint来实现Parcelable吗?看起来创建的对象更少,内部代码看起来更干净。我喜欢这里的IS-A选项,而不是HAS-A。您应该使用服务或静态类成员。通过附加传递大型数据对象不是一个好主意。定义大型附加:)GeoPoint是一个只有两个整数的对象。但你是对的。如果它太大,那就不是个好主意。但是我认为一个地质点列表是可以的。@Falmari:静态类成员是全局的,全局的不好,mmmkay?传递大的额外值或使用静态变量。设计不好还是性能不好?我在想。。。
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);
}
}
ArrayList<ParcelableGeoPoint> pointsExtra = new ArrayList<ParcelableGeoPoint>();
foreach(GeoPoint point: points) {
pointsExtra.add(new ParcelableGeoPoint(point));
}
intent.putExtra("geopoints", pointsExtra);
ArrayList<ParcelableGeoPoint> pointsExtra = getIntent().getParcelableArrayListExtra("geopoints");
ArrayList<GeoPoint> points = new ArrayList<GeoPoint>();
foreach(ParcelableGeoPoint point: pointsExtra) {
points.add(point.getGeoPoint());
}