Android:如何将localoint放入onSavedInstanceState中的Bundle

时间:2013-01-23 08:35:28

标签: android google-maps

我正在使用Google Map API开发应用程序, 我绘制两个点(GeoPoint)成功的路径。

从纵向转换为横向时, 地图将无效(因为活动生命周期),你知道吗? 所以,我失去了两个点

我知道我们必须在方法 onSavedInstanceState(Bundle outState) 中保存两个点。 因此,当从纵向更改为横向时,我想要再次保存两个GeoPoint)用于绘制。

我不知道如何将GeoPoint放入该方法中的Bundle 。 请告诉我?

问候!

1 个答案:

答案 0 :(得分:0)

API docs告诉我Geopoint有一个带有两个参数的构造函数:纬度,经度。这两个属性都有getter。因此,要么获取它们并将它们放在Bundle中,要么扩展类和make it parcellable,或者创建一个包装类。两种解决方案都可以正常工作。

试试这个,我怀疑它会正常工作。

public class ParcelableGeoPoint implements Parcelable {
    private GeoPoint point;    

    public ParcelableGeoPoint(int lat, int lon){
        point = new GeoPoint(lat, lon);
    }

    public ParcelableGeoPoint(Parcel in){
        int[] data = new int[2];
        in.readIntArray(data);
        point = new GeoPoint(data[0], data[1]);
    }

    public int describeContents(){
        return 0;
    }

    public GeoPoint unwrap() {
        return point;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeIntArray(new int[] {point.getLat(), point.getLon()});
    }
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        public ParcelableGeoPoint createFromParcel(Parcel in) {
            return new ParcelableGeoPoint(in); 
        }

        public ParcelableGeoPoint[] newArray(int size) {
            return new ParcelableGeoPoint[size];
        }
    };
}

然后,使用Bundle

将其放入bundle.putParcelable("MYPOINT", geopointParcelable)