Наложение фрагмента на существующий фрагмент

У меня есть дизайн TabLayout или TabHost, который вы хотите рассмотреть. Предположим, это вкладки -

Вкладка1 | Вкладка2 | Вкладка3 | Вкладка4 | Вкладка 5

При этом будут происходить следующие действия -

  1. Tab1 - открывает Fragment1
  2. Tab2 - открывает Fragment2
  3. Tab3 — открывает наложение поверх существующего фрагмента с полупрозрачным черным видом.
  4. Tab4 - открывает Fragment3
  5. Tab5 - открывает Fragment4

Любая идея о том, как решить эту проблему? Заранее спасибо!!

ОБНОВЛЕНИЕ: решение, которое я использовал

Я пробовал это, но мне пришлось сделать много настроек. Так что я остановился посередине, так как работы было чертовски много. Итак, я сделал еще один способ: я поместил еще один вид поверх TabLayout точно в ту же позицию, что и Tab3, и при нажатии на этот View я сделал вид наложения видимым.


person Jimit Patel    schedule 24.06.2016    source источник
comment
Вы используете ViewPager?   -  person Gennadii Saprykin    schedule 24.06.2016
comment
я сейчас использую ViewPager   -  person Jimit Patel    schedule 24.06.2016
comment
как это должно работать, когда пользователь прокручивает страницы с помощью свайпа? должен ли оверлей прокручиваться сбоку поверх текущей страницы? или вкладка 3 игнорируется во время свайпа   -  person Gennadii Saprykin    schedule 24.06.2016
comment
Я отключил салфетки в этом. Он ведет себя как TabHost   -  person Jimit Patel    schedule 24.06.2016
comment
Но это исключено, дизайн похож на наложение из середины   -  person Jimit Patel    schedule 24.06.2016


Ответы (2)


ViewPager не предназначен для этого варианта использования. Вкладки автоматически сопоставляются с соответствующим им элементом в файле ViewPager. Но вот как я мог видеть, как это работает.

  1. Имейте TranslucentOverlayView, у которого есть Visibility.GONE, который перекрывает весь ваш ViewPager.
  2. Попросите tab3 открыть дубликат клона fragment2, а когда выбран tab3, сделайте TranslucentOverlayView видимым. Это означает, что у вас будет два отдельных экземпляра fragment2 рядом.
person ZakTaccardi    schedule 24.06.2016
comment
хорошее предложение попробую это...!! спасибо :) проголосую, как только реализую - person Jimit Patel; 24.06.2016
comment
проверьте вопрос. Я обновил его с ответом. Спасибо за предложение. Это наверняка сработало бы, если бы у меня было время реализовать это :) - person Jimit Patel; 29.06.2016

Как сказал @ZakTaccardi, ViewPager не предназначен для этого.

Однако я бы попробовал создать FragmentPagerAdapter с 5 страницами. Я имею в виду, что getCount() должно возвращать 5. Если текущий индекс равен 2, то вы должны вернуть экземпляр, который в данный момент находится на экране. Это означает, что ваш адаптер должен знать, что такое текущая страница. Вы можете использовать ViewPagers onPageChangeListener, чтобы сообщить адаптеру, что такое текущая страница. Чтобы получить экземпляр, используйте FragmentManager. Не храните ссылку на фрагмент в адаптере, поскольку это приведет к утечке памяти. Это сделано для предотвращения дублирования фрагментов при выборе вкладки 3.

Чтобы отобразить наложение, внедрите View поверх вашего ViewPager и отобразите его в обратном вызове onPageSelected() ViewPager, когда позиция равна 2. Скройте его, если позиция не 2.

person Gennadii Saprykin    schedule 24.06.2016
comment
проверьте вопрос. Я обновил его с ответом. Спасибо за предложение. Это наверняка сработало бы, если бы у меня было время реализовать это :) - person Jimit Patel; 29.06.2016
comment
Вы должны опубликовать его как ответ, а не как обновление вашего вопроса. Тогда вы сможете его принять, и этот вопрос будет считаться отвеченным. На данный момент он еще открыт. Спасибо. - person Gennadii Saprykin; 29.06.2016