0

У меня есть ViewPager, который состоит из нескольких страниц в зависимости от ответа JSON от сервера. Дизайн требует, чтобы каждая страница ViewPager содержала свои собственные вкладки. Вложение ViewPager внутри ViewPager не казалось хорошей идеей, и поэтому я использовал ViewSwitcher внутри отдельных страниц (мне нужно всего лишь два представления max).Раздувание фрагментов внутри фрагмента ViewPager

<ViewSwitcher 
    android:id="@+id/VS_ContentFrame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <FrameLayout 
     android:id="@+id/FL_1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
    <FrameLayout 
     android:id="@+id/FL_2" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</ViewSwitcher> 

Схема расположения каждой страницы в ViewPager показана выше. Все, что я пытаюсь сделать, это заменить каждый из FrameLayouts внутри этого фрагмента новыми фрагментами, отображающими содержимое каждой из вкладок.

Проблема в том, что когда я заменяю определенный FrameLayout на фрагмент, он путается относительно того, какой FrameLayout заменить. Я наблюдаю, что есть только одна страница внутри ViewPager, которая всегда имеет контент. Все остальные страницы пустые. Как мне обойти эту проблему?

+0

Где вы создаете и совершаете транзакции фрагментов? – stkent

+0

Внутри фрагмента, который создается как часть ViewPager. Я нашел решение для него (которое я разместил ниже). Не уверен, что это лучший способ. –

ответ

1

Если вы создаете фрагмент хостинга на страницу ViewPager, а затем применяете макет, который вы включаете в свой вопрос к каждому из этих фрагментов, то вы должны иметь возможность достичь своей цели, используя дочерний менеджер фрагментов. См Fragment.getChildFragmentManager() (я уверен, что есть поддержка версии тоже):

Верните частный FragmentManager для размещения и управления фрагментов внутри этого фрагмента.

Ограниченный объем этого FragmentManager позволит ему однозначно определить правильный FrameLayout, даже если сама ваша ViewPager содержит несколько FrameLayouts с одинаковыми идентификаторами.

+1

Вау! Спасибо, я не знал этого. Это, безусловно, лучший ответ. –

0

Одно из решений, которые я реализовал прямо сейчас, чтобы ухватить в FrameLayout внутри каждого фрагмента и установить его вид ID динамически путем вызова

View.GenerateViewId() 

Таким образом, вид удостоверения личности каждого из FrameLayouts уникальны, и Фрагменты заменяются должным образом без каких-либо проблем. Открывайте предложения, если есть лучший способ сделать то же самое.

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