Domanda

ho un ArrayList di tipo GeoPoint.

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

Voglio passare points ad un'altra attività e retrive i dati in tale attività. Come lo faccio? So che devo usare il parcelable ma ho cercato, ma non ho trovato un modo per passare ArrayLists.

È stato utile?

Soluzione

Questa funzione vi aiuterà a: http://developer.android .com / riferimento / android / content / Intent.html # putParcelableArrayListExtra (java.lang.String , java.util.ArrayList )

Ma il problema è, che non è GeoPoint Parcelable. Beh, si può fare una soluzione qui:

1) Creare una classe, che implementa 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) durante l'invio al altre attività (punti è la vostra lista :

ArrayList<ParcelableGeoPoint> pointsExtra = new ArrayList<ParcelableGeoPoint>();
foreach(GeoPoint point: points) {
   pointsExtra.add(new ParcelableGeoPoint(point));
}
intent.putExtra("geopoints", pointsExtra);

3) nella chiamata di attività:

ArrayList<ParcelableGeoPoint> pointsExtra =  getIntent().getParcelableArrayListExtra("geopoints");

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

foreach(ParcelableGeoPoint point: pointsExtra) {
   points.add(point.getGeoPoint());
}

codice dovrebbe funzionare, ma non è testato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top