Как правильно передать начальные данные фрагментам?

Итак, я узнал, что мне нужен пустой конструктор, чтобы мои фрагменты не падали при повторной инициализации. Моя проблема в том, что я использую списки данных для своих фрагментов, когда они инициализируются (по крайней мере, некоторые из них).Итак, что было бы хорошим способом начать новые фрагменты со списком данных.Должен ли я в OnCreate() сделать метод getData, который получает данные из какого-либо другого источника или какой подход был бы правильным?

Наполнение пакета данными было бы не очень хорошим подходом, поскольку у меня много данных.

Итак, давайте рассмотрим случай (я так это лучше понять).

Когда пользователь нажимает кнопку, фрагмент запускается. Раньше я создавал новый фрагмент следующим образом:

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    fragmentTransaction.replace(R.id.center_container, new DetailFragment(item));
    fragmentTransaction.addToBackStack(DETAIL_TAG);

    fragmentTransaction.commit();

Затем в моем фрагменте:

public DetailFragment(EventItem item) {
    mItem = item;
    mPlaces = Database.getContainerPlaces(getActivity()).getValidItems();
}

I can' не передавать все данные в пакет, так что это не сработает.И что я должен делать?

A: Должен ли я инициализировать фрагмент с помощью пустого конструктора, а затем использовать сеттеры из моей активности для установки данных непосредственно во фрагменте? Однако не будут ли у меня пропущены данные, если пользователь нажмет домой, андроид закроет фрагмент, а пользователь вернется позже?

B: Должен ли я инициализировать фрагмент фабричным шаблоном и вызвать setRetainInstance(true), дать фрагменту ключ для идентификации данных, а затем позволить фрагменту получить данные, необходимые в onCreateView, из какого-то третьего источника?

C: Должен ли я просто создать пустой конструктор, а затем в onCreate() получить данные, необходимые для фрагмента?

Следует отметить, что приложение заблокировано в портретной ориентации, поэтому проблема в основном связана с сохранением объектов при закрытии Android и перезапуске пользователя.

60
задан Unihedron 9 November 2014 в 09:06
поделиться