У меня есть единственное действие для множества фрагментов. В одном из фрагментов я должен теперь иметь несколько вкладок внутри. Пути я могу думать делать это являются:реализация вкладок в фрагменте среди множества фрагментов
Решение 1 - Создание нового вида деятельности только для этого, а затем реализации ViewPager:
Моя главная забота о том решении это: До сих пор, на моей работе у меня был следующий поток: фрагмент 1 -> фрагмент 2 -> фрагмент -> 3 -> фрагмент 4 -> и вкл. и далее ...
Теперь предположим, что мне нужно реализовать эти вкладки в фрагмент 3.
из фрагмента 2, я начинаю новое действие, поместившее viewpager (с фрагментом 3 на одной вкладке и на других вкладках). Затем мне нужно будет показать фрагмент 4. Но так как все фрагменты в приложении размещены на первоначальном мероприятии, это будет смешивать поток или еще хуже. Другими словами вызывают либо:
- Было бы просто не показать фрагмент 4 и так далее, потому что ход деятельности будет тот, который держит экран вкладки, в то время как все фрагменты размещаются на оригинальной деятельности, будет в стеке.
- Не будучи в состоянии вернуться из фрагмента 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 для компоновки вкладок, но это почему-то не помогло.
Надеюсь, я дал понять.
* Изменение всех фрагментов не является вариантом, так как у меня есть более сотни фрагментов. * - это переведёт на несколько нажатий клавиш в Android Studio. Реальный вопрос: почему у вас есть более ста фрагментов? – Luksprog
большое приложение. и извините, я просто проверил - этот номер немного преувеличен. действительное число - около 50 фрагментов (исключая разные виды или контент-обзоры). Еще много. И, честно говоря, я немного неохотно меняю все на v4, поэтому никаких новых проблем/ошибок/сбоев не будет. Поэтому я не уверен, насколько безопасно было бы их преобразовать до v4. Но я могу ошибаться. Спасибо – BVtp
Что касается решения 1, **, если ** фрагмент 4 будет запущен только из фрагмента 3, содержащего ViewPager, я не вижу проблемы при разбиении на 2 действия (1 до продолжения фрагмента 3 и другого). Решение 2 на самом деле не вариант. У вас также есть решение 4, полученное из решения 3: создайте фрагмент, содержащий ViewPager, и попросите Viewpager использовать только обычные макеты (без вложенных фрагментов), оставив обработку этих макетов фрагменту, содержащему ViewPager. Это купит вам время, пока API 16 не уйдет в небытие, и вы можете реорганизовать его для использования родных вложенных фрагментов. – Luksprog