I tried many different solutions found here and on many other sites, but I just can't get it to work!
I have an “Apartment” object in one action that should be used in another action. The action starts from the MyMapOverlayItem class and must start with ApartmentInfoActivity, in which the Apartment object should be used.
MyMapOverlayItem.java:
package com.android.madsoft.spotter;
import java.util.ArrayList;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;
public class MyMapOverlayIcon extends ItemizedOverlay<OverlayItem> {
Context mContext;
ArrayList<Apartment> myList;
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
public MyMapOverlayIcon(Drawable defaultMarker) {
super(defaultMarker);
}
public MyMapOverlayIcon(Drawable defaultMarker, Context context, ArrayList<Apartment> myList) {
super(boundCenterBottom(defaultMarker));
mContext = context;
this.myList = myList;
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
protected boolean onTap(int index) {
Apartment ap = myList.get(index);
ApartmentParcel ap1 = new ApartmentParcel(ap);
Intent i = new Intent(mContext, ApartmentInfoActivity.class);
Bundle b = new Bundle();
b.putParcelable("app", ap1);
i.putExtras(b);
mContext.startActivity(i);
return true;
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size();
}
}
Apartment .java:
package com.android.madsoft.spotter;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class Apartment {
private static final long serialVersionUID = 1L;
int latitude, longitude;
String id,
zipcode,
size,
rooms,
rentprice,
deposit,
takeoverdate,
rentperiod,
furniturized,
usagecost,
addeddate,
description,
prepaid;
ArrayList<String> imageList, phonenumbers;
int imagecount = 1;
ArrayList<Bitmap> bigBitmapList;
ArrayList<Bitmap> smallBitmapList;
public Apartment(String id, int latitude, int longitude,
String zipcode, String size, String rooms,
String rentprice, String deposit, String prepaid, String takeoverdate,
String rentperiod, String furniturized, String usagecost,
String addeddate, String description, ArrayList<String> imageList, ArrayList<String> phonenumbers){
bigBitmapList = new ArrayList<Bitmap>();
smallBitmapList = new ArrayList<Bitmap>();
this.addeddate = addeddate;
this.deposit = deposit;
this.description = description;
this.furniturized = furniturized;
this.id = id;
this.imageList = imageList;
this.latitude = latitude;
this.longitude = longitude;
this.phonenumbers = phonenumbers;
this.prepaid = prepaid;
this.rentperiod = rentperiod;
this.rentprice = rentprice;
this.rooms = rooms;
this.size = size;
this.takeoverdate = takeoverdate;
this.usagecost = usagecost;
this.zipcode = zipcode;
for (String s :imageList){
URL myFileUrl = null;
try {
myFileUrl= new URL(s);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
Bitmap image = BitmapFactory.decodeStream(is);
bigBitmapList.add(image);
Bitmap resized;
int scalerate = (int)image.getHeight()/60;
int newHeight = (int)image.getHeight()/scalerate;
int newWidth = (int)image.getWidth()/scalerate;
resized = Bitmap.createScaledBitmap(image, newWidth, newHeight, false);
smallBitmapList.add(resized);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
ApartmentParcel.java:
package com.android.madsoft.spotter;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Parcel;
import android.os.Parcelable;
public class ApartmentParcel implements Parcelable {
private static final long serialVersionUID = 1L;
int latitude, longitude;
String id,
zipcode,
size,
rooms,
rentprice,
deposit,
takeoverdate,
rentperiod,
furniturized,
usagecost,
addeddate,
description,
prepaid;
ArrayList<String> imageList, phonenumbers;
int imagecount = 1;
ArrayList<Bitmap> bigBitmapList;
ArrayList<Bitmap> smallBitmapList;
public ApartmentParcel(String id, int latitude, int longitude,
String zipcode, String size, String rooms,
String rentprice, String deposit, String prepaid, String takeoverdate,
String rentperiod, String furniturized, String usagecost,
String addeddate, String description, ArrayList<String> imageList, ArrayList<String> phonenumbers){
bigBitmapList = new ArrayList<Bitmap>();
smallBitmapList = new ArrayList<Bitmap>();
this.addeddate = addeddate;
this.deposit = deposit;
this.description = description;
this.furniturized = furniturized;
this.id = id;
this.imageList = imageList;
this.latitude = latitude;
this.longitude = longitude;
this.phonenumbers = phonenumbers;
this.prepaid = prepaid;
this.rentperiod = rentperiod;
this.rentprice = rentprice;
this.rooms = rooms;
this.size = size;
this.takeoverdate = takeoverdate;
this.usagecost = usagecost;
this.zipcode = zipcode;
for (String s :imageList){
URL myFileUrl = null;
try {
myFileUrl= new URL(s);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
Bitmap image = BitmapFactory.decodeStream(is);
bigBitmapList.add(image);
Bitmap resized;
int scalerate = (int)image.getHeight()/60;
int newHeight = (int)image.getHeight()/scalerate;
int newWidth = (int)image.getWidth()/scalerate;
resized = Bitmap.createScaledBitmap(image, newWidth, newHeight, false);
smallBitmapList.add(resized);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
public ApartmentParcel(Apartment ap){
bigBitmapList = new ArrayList<Bitmap>();
smallBitmapList = new ArrayList<Bitmap>();
this.addeddate = ap.getAddeddate();
this.deposit = ap.getDeposit();
this.description = ap.getDescription();
this.furniturized = ap.getFurniturized();
this.id = ap.getId();
this.imageList = ap.getImageList();
this.latitude = ap.getLatitude();
this.longitude = ap.getLongitude();
this.phonenumbers = ap.getPhonenumbers();
this.prepaid = ap.getPrepaid();
this.rentperiod = ap.getRentperiod();
this.rentprice = ap.getRentprice();
this.rooms = ap.getRooms();
this.size = ap.getSize();
this.takeoverdate = ap.getTakeoverdate();
this.usagecost = ap.getUsagecost();
this.zipcode = ap.getZipcode();
runMyParcel();
}
private void runMyParcel(){
for (String s :imageList){
URL myFileUrl = null;
try {
myFileUrl= new URL(s);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
Bitmap image = BitmapFactory.decodeStream(is);
bigBitmapList.add(image);
Bitmap resized;
int scalerate = (int)image.getHeight()/60;
int newHeight = (int)image.getHeight()/scalerate;
int newWidth = (int)image.getWidth()/scalerate;
resized = Bitmap.createScaledBitmap(image, newWidth, newHeight, false);
smallBitmapList.add(resized);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
public void setSmallBitmapList(ArrayList<Bitmap> smallBitmapList) {
this.smallBitmapList = smallBitmapList;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(id);
out.writeString(zipcode);
out.writeString(size);
out.writeString(rooms);
out.writeString(rentprice);
out.writeString(deposit);
out.writeString(takeoverdate);
out.writeString(rentperiod);
out.writeString(furniturized);
out.writeString(usagecost);
out.writeString(addeddate);
out.writeString(description);
out.writeString(prepaid);
out.writeStringList(phonenumbers);
out.writeList(bigBitmapList);
out.writeList(smallBitmapList);
}
private ApartmentParcel(Parcel in) {
id = in.readString();
zipcode = in.readString();
size = in.readString();
rooms = in.readString();
rentprice = in.readString();
deposit = in.readString();
takeoverdate = in.readString();
rentperiod = in.readString();
furniturized = in.readString();
usagecost = in.readString();
addeddate = in.readString();
description = in.readString();
prepaid = in.readString();
in.readStringList(phonenumbers);
in.readTypedList(bigBitmapList, Bitmap.CREATOR);
in.readTypedList(smallBitmapList, Bitmap.CREATOR);
}
public static final Creator<ApartmentParcel> CREATOR = new Creator<ApartmentParcel>() {
public ApartmentParcel createFromParcel(Parcel in) {
return new ApartmentParcel(in);
}
public ApartmentParcel[] newArray(int size) {
return new ApartmentParcel[size];
}
};
}
ApartmentInfoActivity.java:
package com.android.madsoft.spotter;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class ApartmentInfoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.infoview);
Apartment ap = (Apartment)getIntent().getParcelableExtra("app");
TextView zipView = (TextView)findViewById(R.id.txtInfoZip);
zipView.setText(ap.getZipcode());
}
}