I am trying to implement more than 3 tabs in my app with fragments. In FragmentPagerAdapter ,there is one method getItem that returns Frgament so my question is what the logic should we use to shorten the code because it will be so messy when we return all the fragments which may be 10 or more than that
here is my PagerAdapter
class PageAdapter(fragmentManager: FragmentManager, private val tabCount: Int) :
FragmentPagerAdapter(fragmentManager, tabCount) {
override fun getCount() = tabCount
override fun getItem(position: Int): Fragment {
when (position) {
0 -> return NewsCategoryOneFragment()
1 -> return NewsCategoryTwoFragment()
2 -> return NewsCategoryThreeFragment()
3 -> return NewsCategoryFourFragment()
4 -> return NewsCategoryFiveFragment()
}
return NewsCategoryOneFragment()
}
override fun getPageTitle(position: Int): CharSequence? {
when (position) {
0 -> return "Buzzfeed"
1 -> return "CNN"
2 -> return "ESPN"
3 -> return "Fortune"
4 -> return "Fox News"
}
return null
}
}
can anyone plz suggest. Thank You
You should pass a tab list into page adapter and create fragment by position from your tab list.
For Example:
data class TabItem(val title: String)
val tabItemList = listOf(
TabItem("Buzzfeed"),
TabItem("CNN"),
TabItem("CNN"),
TabItem("Fortune"),
TabItem("Fox News")
)
class PageAdapter(
fragmentManager: FragmentManager,
private val tabItemList: List<TabItem>
) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
override fun getCount() = tabItemList.size
override fun getItem(position: Int): Fragment {
return NewsCategoryFragment.newInstance(position)
}
override fun getPageTitle(position: Int): CharSequence? {
return tabItemList[position].title
}
}
class NewsCategoryFragment : Fragment() {
// ...
companion object {
const val KEY_CATEGORY = "category"
fun newInstance(category: Int): NewsCategoryFragment {
return NewsCategoryFragment().apply {
arguments = Bundle().apply { putInt(KEY_CATEGORY, category) }
}
}
}
}