Передача объекта во Fragment и его восстановление
- Есть фрагмент, который отрисовывает в себе несколько элементов
- Есть массив объектов на основании которых эти элементы и должны отрисовываться
- То есть при создании объекта фрагмента ему нужно как-то передать этот массив
- Использоваться массив будет только при наполнении view фрагмента, далее в объекте фрагмента он храниться не будет
- Стандартный вариант проброса аргументов через Bundle не подходит, так как там только "примитимные" типы
- Реализовать Parcelable для объектов сложно и в них много ссылок друг на друга
Конечно, не составляет проблемы добавить классу фрагмента метод для получения этого массива. Однако, я ещё не опытен в android и, здесь, возможно есть какие-то подводные камни?
Насколько я знаю, некоторые компоненты могут в определённый момент выгружаться, а потом восстанавливаться. Если возможна, например, такая ситуация, что фрагмент выгружается, но сохряняется переданный в него bundle, а потом он по нему восстанавливается, то тогда в этот момент массив уже будет недоступен.
При этом, что объект фрагмента, что массив с данными создаются внутри onCreate() активити.
Так что в случае выгрузки/восстановления всего активити, проблемы быть не должно.
Вопрос: где здесь может быть подвох?
Ответы (1 шт):
Если у вас только одна активность из которой вызывается фрагмент и массив создается до вызова фрагмента то можно массив сделать публичной переменной класса активности
public class ActivityAmain {
public ArrayList<YourObject> mArray;
....
А из фрагмента напрямую доставать этот массив
ArrayList array = ((MainActivity)getActivity()).mArray;
Но все же рекомендую везде в моделях реализовать Serializable/Parcelable