2016-03-21 57 views
1

我想从一个活动传递一个对象MyItem的ArrayList到另一个。从我理解我需要在MyItem类中实现Parcable。因此,这是i'va迄今所做的:Android - Parcelable | putParcelableArrayListExtra(“ListItems”,listItems);

public class MyItem implements ClusterItem, Parcelable { 
    private LatLng mPosition=null; 
    private String aString; 

    public MyItem(double lat, double lng, String aString) { 
     mPosition = new LatLng(lat, lng); 
     this.aString= aString; 
    } 

    @Override 
    public LatLng getPosition() { 
     return mPosition; 
    } 

    public String getString(){ 
     return aString; 
    } 


    public int describeContents() { 
     return 0; 
    } 


    public void writeToParcel(Parcel dest, int flags) { 
     //dest.writeLngLat ? 
     dest.writeString(postID); 
    } 

    public static final Parcelable.Creator<MyItem> CREATOR 
      = new Parcelable.Creator<MyItem>() { 
     public MyItem createFromParcel(Parcel in) { 
      return new MyItem(in); 
     } 

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

    private MyItem(Parcel in) { 
     //mPosition = in.readLngLat ? 
     aString = in.readString(); 
    } 
} 

第一个问题:我怎么能写LngLat领域writeToParcel,我怎么能decleare它MyItem(包裹中)构造函数?

第二个问题:这是否足以让这段代码可以工作?

    ArrayList<MyItem> listItems = new ArrayList<>(); 
        Iterator<MyItem> items = cluster.getItems().iterator(); 
        while (items.hasNext()) { 
         listItems.add(items.next()); 
        } 
        Intent intent = new Intent(MapsActivity.this, ClusterPosts.class); 
        intent.putParcelableArrayListExtra("oO", listItems); 
        startActivity(intent); 

,然后在CluserPosts:

Intent intent = getIntent(); 
    ArrayList<MyItem> post = intent.getParcelableArrayListExtra("oO"); 
    for(MyItem item : post){ 
     Log.d("elaela", item.getString()); 
    } 
+0

'LatLng'是'Parcelable',对不对? – pskink

+0

LatLng是Google Maps API的“默认”对象,未由我实施。但是我认为它实际上可以是 –

+0

,所以它是'Parcelable',然后直接从/到'Parcel'读/写它 – pskink

回答

1

写包裹为 -

dest.writeDouble(mPosition.latitude); 
dest.writeDouble(mPosition.longitude); 
0

双打只有到目的地,然后形成一个位置你可以写的经度和纬度。

dest.writeDouble(lat); 
dest.writeDouble(long);