2014-01-13 9 views
4

У меня есть пользовательский класс Data, который содержит все данные. Основное действие создает два фрагмента. У меня есть поле в основной деятельности, как это:Пропустить пользовательский класс для фрагмента

private Data data = new Data(); 

Фрагменты создаются с помощью этого метода:

private ArrayList<Fragment> getFragments() { 
    ArrayList<Fragment> fragments = new ArrayList<Fragment>(); 
    fragments.add(new fragment_one()); 
    fragments.add(new fragment_two()); 
    return fragments; 
} 

мне нужно передать поле данных на фрагменты, поэтому фрагменты могут Acces методы данных.

Я попытался создать пакет, но я не могу передать пользовательский класс. Что я могу сделать?

+1

действительно ли класс данных реализуется? – Raghunandan

+0

Это не так. Я буду смотреть в него. Есть ли другой способ? – Nfear

+0

http://stackoverflow.com/questions/2139134/how-to-send-an-object-from-one-android-activity-to-another-using-intents.может быть, это помогает – Raghunandan

ответ

4

Пучки могут принимать пользовательские классы, если они реализуют либо Parcelable или Serializable, Parcelable является быстрее, но больше работы по внедрению, а Serializable проще реализовать, но медленнее.

Тогда вы можете сделать это:

Bundle bundle = new Bundle(); 
bundle.putSerializable("MyData", data); 
fragment_one.setArguments(bundle); 

Теперь fragment_one будет иметь доступ к data в это onCreate(Bundle bundleHoldingData) метод.

Другой вариант - иметь публичный сеттер в вашем фрагменте, который принимает данные. Воспользуйтесь этим, вам не нужно ждать, пока данные будут готовы добавить фрагмент.

4

Данные необходимо либо реализовать Parcelable, либо Serializable.

Вы можете либо использовать bundle.putParcelable(), либо bundle.putSerializable(), чтобы передать данные обоим фрагментам с помощью метода setArguments().

1

Вы не должны передавать ссылки на фрагменты, все ваши данные должны быть переданы с использованием setArguments (если только ваш фрагмент не сохранен). Причина в том, что андроид может уничтожить ваш фрагмент во время изменения конфигурации и воссоздать его во время создания активности.

Таким образом, вы должны либо передать свои данные внутри setArguments, либо предоставить доступ к нему, используя singleton class, т.е. класс приложения.

[править] - нету пробовал это сам, но вы можете найти в Интернете инструменты, чтобы сделать ваш класс данных parcelable, вот один: http://devk.it/proj/parcelabler/

0

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

0

Одним из вариантов является предоставление доступа для данных класса Activity. Затем в своем фрагменте вы вызываете getActivity(), передаете его производному типу и получаете данные по мере необходимости.

Это, конечно же, создает зависимость от вашего фрагмента к активности, но если он не предназначен для универсального, повторно используемого фрагмента, он будет очень простым и простым в реализации и означает, что вы можете получить ссылку на текущие данные о деятельности, а не такая копия, как стратегия Bundle/Parcelable/Serializable.

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