Вы могли бы сделать что-то вроде этого.
Из выбранных пользователем фрагментов создайте IntArray, например [0,3,4] или [3,4,2,1] et c ..
Инициализируйте адаптер с помощью этот IntArray выбранного фрагмента.
В getItem
возвращает фрагмент, который пользователь выбрал для этой указанной c позиции. В этом примере я создал для этого функцию getFragmentBySelectedPosition
.
getCount
возвращает количество выбранных фрагментов (длина IntArray)
class FruitFragAdapter(fm: FragmentManager, private val selectedFragments: IntArray) : FragmentStatePagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
private val appleFragment by lazy {
AppleFragment().newInstance()
}
private val orangeFragment by lazy {
OrangeFragment().newInstance()
}
private val bananaFragment by lazy {
BananaFragment().newInstance()
}
private val mangoFragment by lazy {
MangoFragment().newInstance()
}
private val grapesFragment by lazy {
GrapesFragment().newInstance()
}
private val cherryFragment by lazy {
CherryFragment().newInstance()
}
private fun getFragmentBySelectedPosition(position: Int): Fragment {
return when (position) {
0 -> appleFragment
1 -> orangeFragment
2 -> bananaFragment
3 -> mangoFragment
4 -> grapesFragment
5 -> cherryFragment
else -> throw IllegalArgumentException("No fragment for: $position")
}
}
override fun getItem(position: Int): Fragment {
return getFragmentBySelectedPosition(selectedFragments[position])
}
override fun getPageTitle(position: Int): CharSequence? {
return when (selectedFragments[position]) {
0 -> "Apple"
1 -> "Orange"
2 -> "Banana"
3 -> "Mango"
4 -> "Grapes"
5 -> "Cherry"
else -> ""
}
}
override fun getCount(): Int {
return selectedFragments.count()
}
}