Как передать ArrayList‹my_custom_class› другому действию?

Этот вопрос состоит из 2 частей

Я пытаюсь передать ArrayList от одного Activity к другому. этот Arraylist содержит некоторые объекты, созданные из класса, который я создал (содержат некоторые строки и Drawable).

Я нашел в Интернете, что мне нужно сделать мой класс Parcelable, что было проблемой, особенно с Drawable (это первая часть)

Как только мой класс реализует Parcelable, как я смогу отправить/получить свой Arraylist.


person ColdFire    schedule 10.08.2011    source источник


Ответы (3)


Я настоятельно рекомендую вам пересмотреть свою архитектуру. Вы не должны передавать чертежи через границы активности по нескольким причинам, включая утечку контекста, утечку растрового изображения и потенциальное нарушение ограничения размера для вызовов IPC.

Если вам действительно нужно такое поведение, правильным подходом будет сохранение ваших рисунков в базе данных/SharedPreference и ваших растровых изображений в файлах, а затем, когда начнется второе действие, вы сможете воссоздать эти чертежи, потянув данные и изображения.

Не могли бы вы описать, почему двум разным действиям нужен доступ к одному и тому же списку рисунков? Я подозреваю, что некоторая реструктуризация могла бы полностью избежать этой проблемы.

person Josh    schedule 10.08.2011
comment
спасибо за ваш ответ, во-первых, список не включает только чертежи, и причина передачи такого списка заключается в том, что первое действие имеет форму и сделает вызов веб-службы после проведения некоторого исследования. результат включает некоторый URL-адрес изображения и будет загружен в виде списка и в действии, которое будет запущено следующим. поэтому я предположил, что отправка рисунков будет лучше, чем загружать их дважды из Интернета .. не так ли? надеюсь, я ясно выразился, - person ColdFire; 13.08.2011
comment
Хорошо, тогда позвольте мне спросить вас: что происходит в вашем первом действии, когда вы поворачиваете устройство и проходите цикл уничтожения/создания? Или что, если вы нажмете «Домой», а затем вернетесь в свое приложение, нажав и удерживая кнопку «Домой»? Либо ваши изображения загружаются снова, либо вы вылетаете. Вам необходимо сохранить эти загруженные изображения во временном кеше на диске, чтобы вы могли снова получить к ним доступ, не загружая их. Как только вы это сделаете, доступ к ним из следующего действия также должен быть тривиальным. - person Josh; 18.08.2011

Вы можете сделать свой ArrayList общедоступным статическим и получить к нему доступ в любом месте, вызвав его как Activity_name.array_list_name.

Где Activity_name — это имя класса, в котором вы определите ArrayList.

person Lalit Poptani    schedule 10.08.2011
comment
спасибо за ответ .. установка массива как общедоступного может быть решением, но я хотел бы отправить его в следующее действие (которое изменит его, и эти изменения должны быть сохранены только в этом действии), поэтому мне нужно знать, как сделать мой класс - person ColdFire; 10.08.2011
comment
Нет, это не изменит значения в ArrayList, если вы определите его общедоступным статическим. - person Lalit Poptani; 10.08.2011
comment
на самом деле изменения, внесенные в статический объект, будут внесены во все приложение, что бесполезно. - person ColdFire; 10.08.2011
comment
В противном случае вы можете создать класс, который расширяет приложение и работать соответственно. - person Lalit Poptani; 10.08.2011

передача объекта невозможна без его расширения Parcelable. Итак, я предлагаю создать класс с именем store() или что-то в этом роде и сделать его singleTon. который имеет частное поле типа ArrayList(). и создайте геттеры и сеттеры для одной и той же переменной, и где бы вы ни создавали объект, просто скажите store().getInstance().setObject(yourObject);

и при получении

store().getInstance().getObject();
person ngesh    schedule 10.08.2011
comment
спасибо за предложение, но мне было не по себе, если бы кто-нибудь знал, как реализовать Parcelable с возможностью рисования в нем. - person ColdFire; 10.08.2011