Фрагменты. Нужно ли использовать обертыватель активности вокруг фрагмента, который включает всю активность?

Рассмотрим пример приложения от developers.android.com

Это описывает использование таких фрагментов:

  • На телефоне вы можете использовать фрагмент 1 в действии A и фрагмент 2 для операции B.
  • На планшете у вас больше недвижимости, поэтому вы используете фрагмент 1 и фрагмент 2 на мероприятии А.

Большой! … Но … В первом примере (с телефоном) вы создаете Activity с xml-файлом, содержащим единственный <fragment> и все, в этом setContentView() вы вызываете только setContentView() на этом xml? Это похоже на много избыточного кода (Activity, XML & Fragment для отображения фрагмента). Можете ли вы установить Fragment как Activity или всегда требуется Wrapper с XML?

Solutions Collecting From Web of "Фрагменты. Нужно ли использовать обертыватель активности вокруг фрагмента, который включает всю активность?"

Ах, нашел это здесь

 public class MainMenuHolder extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // If not already added to the Fragment manager add it. If you don't do this a new Fragment will be added every time this method is called (Such as on orientation change) if(savedInstanceState == null) getSupportFragmentManager().beginTransaction().add(android.R.id.content, new MainMenuFragment()).commit(); } } 

FragmentActivity позволяет вам установить Фрагмент как содержимое android.R.id.content который, как я полагаю, является внутренним идентификатором андроида внутреннего вида сундука.

С помощью этого метода вы по-прежнему оказываете преимущественно избыточную активность (если все, что вам нужно, это Фрагмент, действующий как Activity). Но все же, вдвое меньше пуха, чем работа и файл XML, действующий как контейнер.

Любые другие ответы будут оценены!

В онлайн-примере не заполняются все пробелы. Я постараюсь ответить на ваши вопросы напрямую:

«В первом примере (с телефоном) вы должны создать Activity с xml-файлом, содержащим сингл и действие, которое вызывает только вызов setContentView () в этом xml, и все?»

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

  1. Создание макетов XML-файлов в / макет для первичной (по умолчанию) целевой ориентации / устройства / форм-фактора / SDK
  2. Создайте XML-файлы формата для минимальной базовой линии для других целевых устройств. Вы также можете настроить таргетинг на другие ориентации, SDK и т. Д.
  3. Каждый XML-файл макета будет иметь собственный набор определенных фрагментов
  4. В Управлении проверьте, какие фрагменты присутствуют.

Очевидно, что аналогичная стратегия может быть принята для программных макетов.

В вашем примере в исходном вопросе (из документов Google) вы можете:

  • Layout / main.xml :: в этом макете будет только фрагмент 1
  • Layout-sw600dp / main.xml :: в этом макете будут фрагменты 1, 2

Затем в MainActivity.java вы должны проверить наличие каждого фрагмента. Для этого вы можете использовать FragmentManager # findFragmentById () для проверки: если findFragmentById () возвращает null для Fragment-2, то MainActivity знает, что устройство загрузило layout / main.xml и поддерживает только один фрагмент.

Вывод «назад» из примера несколько показывает, что: до использования фрагментов вы могли бы вызвать Activity B из Activity A с startAcitityForResult (int). В парадигме фрагмента вы, вероятно, должны только иметь результат из фрагмента 2, чтобы что-то произошло во Фрагменте 1, поэтому разумно, чтобы MainActivity был гейткипером для этого. По мере расширения на примере вы можете увидеть, что в других приложениях MainActivity, возможно, потребуется вызвать другие действия – по какой-либо причине. Возможно, вы нацеливаете большой планшет с достаточным количеством недвижимости на 3 фрагмента, но на телефоне, который должен быть 3-мя действиями. Все может стать интересным, но API-интерфейс Fragment достаточно мощный.

«Можете ли вы установить Фрагмент в качестве действия или требуется, чтобы обертка использовалась при использовании фрагментов?»

Фрагмент не является активностью. Действительно, фрагменты загружаются в действия, поэтому да можно сказать, что всегда требуется оболочка. Вы касаетесь другого тонкого аспекта Фрагментов. Принимая во внимание, что действия ведут себя как MVC-контроллеры, фрагменты можно назвать «мини-контроллерами» из-за их жизненного цикла, которые похожи и выполняются вместе с Activity. Опять же, жизненный цикл Фрагмента содержится внутри («завернутый») жизненным циклом Activity, управляющего фрагментом. Я рекомендую ознакомиться с жизненным циклом фрагмента, зарегистрированным по адресу http://developer.android.com/guide/topics/fundamentals/fragments.html#Lifecycle .