http://developer.android.com/reference/android/os/Parcelable.html
A Activity
调用,PoiResultActivity
Intent intent = new Intent(); intent.setClass(this, PoiResultActivity.class); Bundle bundle = new Bundle(); ArrayList<PoiInfoParcelable> allPoiInfo = new ArrayList<PoiInfoParcelable>(); ArrayList<MKPoiInfo> allPoi = result.getAllPoi(); for (MKPoiInfo poiInfo : allPoi) { allPoiInfo.add(new PoiInfoParcelable(poiInfo)); } bundle.putParcelableArrayList(MAP_ALL_POI_RESULT, allPoiInfo); intent.putExtras(bundle); startActivityForResult(intent, CODE_POI_RESULT);
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == CODE_POI_INFO_PARCELABLE) { PoiInfoParcelable poiInfo = (PoiInfoParcelable) data.getExtras().get(MAP_SELECTED_POI_INFO); int position = data.getExtras().getInt(MAP_SELECTED_POI_INFO_POSITION); moveToMyLocation(poiInfo.pt); mPoioverlay.setShowPopView(position); } super.onActivityResult(requestCode, resultCode, data); }
PoiResultActivity接受
private void bindData() { Bundle bundle = getIntent().getExtras(); ArrayList<PoiInfoParcelable> allPoiResult = bundle.getParcelableArrayList(MAP_ALL_POI_RESULT); PoiResultItemAdapter adapter = new PoiResultItemAdapter(this, allPoiResult); mListView.setAdapter(adapter); }
PoiResultActivity返回到A Activity
Intent intent = new Intent(); intent.putExtra(MAP_SELECTED_POI_INFO_POSITION, position); intent.putExtra(MAP_SELECTED_POI_INFO, (PoiInfoParcelable)obj); setResult(CODE_POI_INFO_PARCELABLE, intent); finish();
这个地方应为我要传递一个百度地图的地理信息去下个Activity中,所以直接从MKPoiInfo继承了
public class PoiInfoParcelable extends MKPoiInfo implements Parcelable { public PoiInfoParcelable(){ } public PoiInfoParcelable(MKPoiInfo poiInfo) { this.address = poiInfo.address; this.city = poiInfo.city; this.ePoiType = poiInfo.ePoiType; this.name = poiInfo.name; this.phoneNum = poiInfo.phoneNum; this.postCode = poiInfo.postCode; this.pt = poiInfo.pt; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.address); dest.writeString(this.city); dest.writeString(this.name); dest.writeString(this.phoneNum); dest.writeString(this.postCode); dest.writeInt(this.ePoiType); dest.writeInt(this.pt.getLatitudeE6()); dest.writeInt(this.pt.getLongitudeE6()); } public final static Parcelable.Creator<PoiInfoParcelable> CREATOR = new Creator<PoiInfoParcelable>() { @Override public PoiInfoParcelable[] newArray(int size) { return new PoiInfoParcelable[size]; } @Override public PoiInfoParcelable createFromParcel(Parcel source) { PoiInfoParcelable poiInfo = new PoiInfoParcelable(); poiInfo.address = source.readString(); poiInfo.city = source.readString(); poiInfo.name = source.readString(); poiInfo.phoneNum = source.readString(); poiInfo.postCode = source.readString(); poiInfo.ePoiType = source.readInt(); poiInfo.pt = new GeoPoint(source.readInt(), source.readInt()); return poiInfo; } }; }
如果是复杂的情况,就是N多的参数,可以用下面这种方式
public class PoiResultParcelable implements Parcelable { private ArrayList<PoiInfoParcelable> poiInfoList; public ArrayList<PoiInfoParcelable> getPoiInfoList() { return poiInfoList; } public void setPoiInfoList(ArrayList<PoiInfoParcelable> poiInfoList) { this.poiInfoList = poiInfoList; } public PoiResultParcelable(Parcel in) { readFromParcel(in); } private void readFromParcel(Parcel in) { in.readTypedList(poiInfoList, PoiInfoParcelable.CREATOR); } @Override public int describeContents() { return poiInfoList == null ? 0 : poiInfoList.size(); } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeList(poiInfoList); } public final static Parcelable.Creator<PoiResultParcelable> CREATOR = new Creator<PoiResultParcelable>() { @Override public PoiResultParcelable[] newArray(int size) { return new PoiResultParcelable[size]; } @Override public PoiResultParcelable createFromParcel(Parcel source) { PoiResultParcelable poiResult = new PoiResultParcelable(source); return poiResult; } }; }