2016-04-20 4 views
2

У меня есть единственное действие для множества фрагментов. В одном из фрагментов я должен теперь иметь несколько вкладок внутри. Пути я могу думать делать это являются:реализация вкладок в фрагменте среди множества фрагментов

Решение 1 - Создание нового вида деятельности только для этого, а затем реализации ViewPager:

Моя главная забота о том решении это: До сих пор, на моей работе у меня был следующий поток: фрагмент 1 -> фрагмент 2 -> фрагмент -> 3 -> фрагмент 4 -> и вкл. и далее ...

Теперь предположим, что мне нужно реализовать эти вкладки в фрагмент 3.

из фрагмента 2, я начинаю новое действие, поместившее viewpager (с фрагментом 3 на одной вкладке и на других вкладках). Затем мне нужно будет показать фрагмент 4. Но так как все фрагменты в приложении размещены на первоначальном мероприятии, это будет смешивать поток или еще хуже. Другими словами вызывают либо:

  1. Было бы просто не показать фрагмент 4 и так далее, потому что ход деятельности будет тот, который держит экран вкладки, в то время как все фрагменты размещаются на оригинальной деятельности, будет в стеке.
  2. Не будучи в состоянии вернуться из фрагмента 4 на экран с закладками, а затем с «задней» с экрана вкладки фрагментировать 2, а затем 1.

Решение 2 - активность результата (с представлением пейджера):

Активность, созданная для экрана вкладок, может быть активностью, которая возвращается к исходной деятельности. поэтому поток будет выглядеть следующим образом: фрагмент 2 -> новый вид деятельности для результата -> отправить результат назад к исходной активности, заявив, что ему нужно запустить фрагмент 4 сейчас -> открыть исходную активность фрагмента 4.

Однако в в этом случае, если я вернусь назад от фрагмента 4, он вернет меня к фрагменту 2 вместо экрана табуляции (3).

Решение 3 - Вкладка Layout:

Кажется самым лучшим решением. Однако, чтобы использовать это мне нужно getChildFragmentManager(), для чего требуется api 17 и выше. Мой api равен 16. Теперь, если я использую getSupportChildFragmentManager(), мне пришлось бы использовать фрагмент v4. Проблема в том, что все мои фрагменты являются родными, и я не могу просто изменить этот фрагмент 3 на v4, поэтому предыдущие и следующие должны быть v4. Изменение всех фрагментов не является вариантом, так как у меня около 50 фрагментов.

Еще одна проблема с раствором 3 я столкнулся, является то, что он выходит из строя, и печатает: Error inflating class android.support.design.widget.TabLayout я пытался создать новую папку с именем значения-V21, и создали там styles.xml для компоновки вкладок, но это почему-то не помогло.

Надеюсь, я дал понять.

+0

* Изменение всех фрагментов не является вариантом, так как у меня есть более сотни фрагментов. * - это переведёт на несколько нажатий клавиш в Android Studio. Реальный вопрос: почему у вас есть более ста фрагментов? – Luksprog

+0

большое приложение. и извините, я просто проверил - этот номер немного преувеличен. действительное число - около 50 фрагментов (исключая разные виды или контент-обзоры). Еще много. И, честно говоря, я немного неохотно меняю все на v4, поэтому никаких новых проблем/ошибок/сбоев не будет. Поэтому я не уверен, насколько безопасно было бы их преобразовать до v4. Но я могу ошибаться. Спасибо – BVtp

+1

Что касается решения 1, **, если ** фрагмент 4 будет запущен только из фрагмента 3, содержащего ViewPager, я не вижу проблемы при разбиении на 2 действия (1 до продолжения фрагмента 3 и другого). Решение 2 на самом деле не вариант. У вас также есть решение 4, полученное из решения 3: создайте фрагмент, содержащий ViewPager, и попросите Viewpager использовать только обычные макеты (без вложенных фрагментов), оставив обработку этих макетов фрагменту, содержащему ViewPager. Это купит вам время, пока API 16 не уйдет в небытие, и вы можете реорганизовать его для использования родных вложенных фрагментов. – Luksprog

ответ

1

У вас есть другое решение, полученное из решения 3.Это необходимо для сохранения вашей текущей навигации (фрагмент1-> фрагмент2-> и т. Д.) И создания фрагмента для размещения ViewPager с простыми макетами вместо вложенных фрагментов. Таким образом, вы избегаете: проблемы с навигацией, проблемная вложенная apis не присутствует в версии 16 (которую вы планируете поддерживать), и вы также избежите рефакторинга для использования фрагмента поддержки api.

И если позднее вы откажетесь от поддержки версии 16, вы можете реорганизовать каждый из этих простых макетов во вложенном фрагменте и использовать собственный getChildFragmentmanager().

+0

по какой-то причине я продолжаю получать эту «ошибку раздувания TabLayout» crash .. Я добавил styles.xml в папку значений-v21 (решение, которое, кажется, работает для всех), но это не помогает .. – BVtp

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