Как повторно использовать объект Parcelable в Android? - PullRequest
2 голосов
/ 03 января 2012

У меня есть класс, который реализует интерфейс Parcelable. Содержит HashMap, HashMap содержит растровые изображения. Мне нужно это HashMap для всех моих действий. Поэтому я использовал Parcelable. Посмотрите на мой Parcelable код.

private HashMap<String, Bitmap> map;

        public ParcelFullData() {
            map = new HashMap();
        }

        public ParcelFullData(Parcel in) {
            map = new HashMap();
            readFromParcel(in);
        }

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

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

        public int describeContents() {
            return 0;
        }

        public void writeToParcel(Parcel dest, int flags) {
            dest.writeInt(map.size());
            for (String s: map.keySet()) {
                dest.writeString(s);
                dest.writeValue(map.get(s));
            }
        }

        public void readFromParcel(Parcel in) {
            int count = in.readInt();
            for (int i = 0; i < count; i++) {
                map.put(in.readString(), (Bitmap)in.readValue(Bitmap.class.getClassLoader()));
            }
        }

        public Bitmap get(String key) {
            return map.get(key);
        }

        public String[] getKeys() {
            Set<String> mapset = map.keySet();
            String[] photoName = new String[mapset.size()];
            Iterator<String> itr = mapset.iterator();
            int index = 0;
            while (itr.hasNext()) {
                String name = itr.next();
                photoName[index] = name;
                index++;
            }
            return photoName;
        }

        public void put(String key, Bitmap value) {
            map.put(key, value);
        }

        public HashMap<String, Bitmap> getHashMap() {
            return map;
        }

Это будет работать нормально, когда я передам один Activity другому Activity. (Например, Activity A на Activity B.) Но если я передам это другому действию (Например, Activity B на Activity C.) означает, что HashMap не содержит элементов. Этот размер равен 0.

В Activity_A,

Intent setIntent = new Intent(activity_a, Activity_B.class);

ParcelFullData parcelData = new ParcelFullData();

Bundle b = new Bundle();
b.putParcelable("parcelData", parcelData);
startActivity(setIntent);

In Activity_B

ParcelFullData parcelData = (ParcelFullData)bundle.getParcelable("parcelData");

Parcel parcel = Parcel.obtain();
parcel.writeParcelable(parcelData , 0);
parcelData.writeToParcel(parcel, 0);
Intent setIntent = new Intent(activity_a, Activity_B.class);
Bundle b = new Bundle();
b.putParcelable("parcelData", parcelData);
startActivity(setIntent);

Я делаю то же самое в Activity C.

Как использовать разрешить это?

1 Ответ

1 голос
/ 03 января 2012

Почему вы используете bundle? Вы не добавляете этот пакет в намерение. Используйте Intent.putExtra(String, Parcelable) и все будет хорошо. Я передаю один Parcelable объект всем действиям в моем приложении, и он отлично работает

В первом занятии:

Intent i = new Intent(activity_a, Activity_B.class);
i.putExtra("parcelData", parcelData);

Во втором занятии:

parcelData = getIntent().getParcelableExtra("parcelData");
// ... do anything with parcelData here
Intent i = new Intent(activity_b, Activity_C.class);
i.putExtra("parcelData", parcelData);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...