FrameLayout или вложенные фрагменты?

Моя проблема

Я перед дилеммой. У меня есть фрагмент, который имеет 3 разных режима. Ну, это фрагмент истории. Режимы:

  • Обзор (отображает GridView);
  • Ячейка (отображает GridView's ячейку);
  • Пусто (отображает ImageView и TextView);

Мой вопрос

Вот и не могу понять как это организовать. Должен ли я использовать три фрагмента (использовать вложенные фрагменты) для каждого режима как дочерний в родительский фрагмент? Или просто использовать один фрагмент с FrameLayout и переключаться между разными макетами? Какое лучшее решение? Поделитесь своими идеями!

Я был бы очень признателен за вашу помощь. Алекс. P.S. Извините за мой английский :)


person AlexMomotov    schedule 29.09.2013    source источник


Ответы (1)


Я бы выбрал подход с несколькими фрагментами. Он не только помогает создавать повторно используемые элементы пользовательского интерфейса, но и легко поддерживает несколько размеров экрана (http://developer.android.com/guide/components/fragments.html#Design).

Однако, я думаю, вам нужно всего два фрагмента: один фрагмент для режима «Обзор» и другой фрагмент для режима «Ячейка».

Вам не нужен фрагмент для пустого режима. Вы должны построить представление с ImageView и TextView и установить его в GridView фрагмента «Обзор» как emptyView (используя GridView.setEmptyView(View)).

person huy.nguyen    schedule 29.09.2013
comment
Хорошее мнение! Но моя проблема немного глубже: этот фрагмент прикреплен к ViewPager, поэтому я не могу просто заменить его через Transaction. Из-за этого я должен сделать какой-то родительский фрагмент для истории, а затем вставлять в него фрагменты. Но согласно Google: Часто вам нужно, чтобы один фрагмент взаимодействовал с другим, например, для изменения содержимого на основе пользовательского события. Вся связь между фрагментами осуществляется через связанное действие. Два фрагмента никогда не должны взаимодействовать напрямую. Поэтому я думаю, что вложенный фрагмент — плохая идея, а FrameLayout — хорошая. Не так ли? - person AlexMomotov; 29.09.2013
comment
Что ж, тогда я бы заменил родительский фрагмент, который содержит пейджер представления, фрагментом ячейки, когда это необходимо, через активность хоста. Таким образом, он будет использовать несколько фрагментов, но не вложенные фрагменты. - person huy.nguyen; 30.09.2013
comment
Я думаю, что FrameLayout может быть простым и легким в реализации на данный момент, но несколько фрагментов дадут вам больше преимуществ в долгосрочной перспективе с точки зрения повторного использования и удобства обслуживания. - person huy.nguyen; 30.09.2013
comment
В порядке. Я понял. Большое спасибо! - person AlexMomotov; 01.10.2013