Android: Lista Passo per un'altra attività
-
30-09-2019 - |
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.
Soluzione
Questa funzione vi aiuterà a: http://developer.android .com / riferimento / android / content / Intent.html # putParcelableArrayListExtra (java.lang.String , java.util.ArrayList estende android.os.Parcelable>)
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.