2014-10-13 4 views
0

Я знаю, что если я хочу, чтобы отправить заказ объекта O из Activity A в Activity B, я должен сделать объект O реализовать Parcelable. Однако, в настоящее время объект O имеет много различных типов полей , В этом случае я могу просто использовать одноэлементный? Например,Android - Передача объектов между деятельностью

1. in Activity B, I create a public static Object o; 

2. in Activity A, I do 
B.o = ObjectToSend; 
startActivity(intent for B); 

3. in Activity B's onCreate(), I do 
O o = B.o; 
if o is not null, use o.. 

Есть ли проблема с этим подходом? Thanks

+1

Я бы отказался от неправильного использования шаблона дизайна. – Blackbelt

ответ

0

Вы можете подклассифицировать свой собственный класс Application и сделать свой объект полем этого класса. Подкласс Application существует до тех пор, пока ваша программа работает, поэтому ваш объект будет там постоянно.

1

Вы можете просто сделать сериализуемым? (если это так, посмотрите на этот вопрос для примера: Pass serializable object throught intent)

Если вы действительно хотите пойти с «статическим» подходом, я бы изучил использование подкласса приложения, он больше предназначен для обработки состояния приложения, это то, что вы пытаетесь пройти. если это так, google "android custom application class", и вы получите несколько хороших блогов и сообщений об использовании этого.

приличная записка о Parcelable vs Serializable

+0

Не намного сложнее сделать что-то существенное, чем Serializable, и это предотвратит множество возможных проблем. –

+0

как ссылка, в которую я включил, говорит о том, чтобы сделать somethign Serializable, вы просто добавляете «инвентарь». "каждому классу. Чтобы сделать это, вы должны добавить методы типа плиты котла для каждого класса. я бы взял 2 слова над конструктором и дополнительным методом в любой день. – Dave

+0

Объект, который я хочу передать, имеет следующее поле. HashMap . В этом случае я не думаю, что могу сделать это возможным или сериализуемым ... не так ли? Разве не проще было бы просто установить этот объект в статическом одноэлементном поле из A и прочитать его из B? – user2062024

1

Предполагая, что нет других потоков может изменить эти параметры, то будет работать именно так, но это, как правило, чаще, чтобы отделить Singleton вне в его собственном классе (например)

public class ObjectSingleton{ 
    private static ... someobject; 

    //getters and setters 

} 

Так что проще обернуть вокруг него безопасный по потоку код.

Смежные вопросы