Android 具有3个以上选项卡的ViewPager
我正在尝试在我的应用程序中使用碎片实现3个以上的选项卡。在FragmentPagerAdapter中,有一个方法getItem返回Frgament,所以我的问题是,我们应该使用什么逻辑来缩短代码,因为当我们返回所有可能是10个或更多的片段时,它会非常混乱 这是我的PagerAdapterAndroid 具有3个以上选项卡的ViewPager,android,kotlin,android-viewpager,fragment,Android,Kotlin,Android Viewpager,Fragment,我正在尝试在我的应用程序中使用碎片实现3个以上的选项卡。在FragmentPagerAdapter中,有一个方法getItem返回Frgament,所以我的问题是,我们应该使用什么逻辑来缩短代码,因为当我们返回所有可能是10个或更多的片段时,它会非常混乱 这是我的PagerAdapter class PageAdapter(fragmentManager: FragmentManager, private val tabCount: Int) : FragmentPagerAdapter(fra
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
}
}
有人能推荐吗。
谢谢您应该将选项卡列表传递到页面适配器中,并从选项卡列表中按位置创建片段 例如:
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) }
}
}
}
}
数据类选项卡项(val标题:字符串)
val tabItemList=listOf(
TabItem(“Buzzfeed”),
TabItem(“CNN”),
TabItem(“CNN”),
TabItem(“财富”),
TabItem(“福克斯新闻”)
)
类页面适配器(
碎片管理器:碎片管理器,
private val tabItemList:List
):FragmentPagerAdapter(fragmentManager,行为\仅恢复\当前\片段){
重写fun getCount()=tabItemList.size
覆盖趣味getItem(位置:Int):片段{
return newCategoryFragment.newInstance(位置)
}
覆盖有趣的getPageTitle(位置:Int):字符序列{
返回tabItemList[位置].title
}
}
类NewsCategoryFragment:Fragment(){
// ...
伴星{
const val KEY_CATEGORY=“CATEGORY”
有趣的新实例(类别:Int):NewCategoryFragment{
返回NewsCategoryFragment()。应用{
arguments=Bundle().apply{putInt(KEY_CATEGORY,CATEGORY)}
}
}
}
}
好的,首先为pageTitle和其他属性/功能创建一个基本片段:
open class BaseFragment: Fragment() {
var pageTitle: String = "Default Title"
}
您的自定义类扩展了此BaseFragment,如下所示:
class CustomFragment: BaseFragment() {
companion object {
fun newInstance(pageTitle: String): CustomFragment {
val fragment = CustomFragment()
val args = Bundle()
args.putString("title", pageTitle)
fragment.arguments = args
return fragment
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val args = Bundle()
pageTitle = args.getString("title")!!
}
}
然后创建阵列:
val fragmentList = listOf(
CustomFragment.newInstance("title1"),
CustomFragment.newInstance("title2"),
CustomFragment.newInstance("title3"),
CustomFragment.newInstance("title4"),
CustomFragment.newInstance("title5")
)
最后,更改您的PagerAdapter:
class PageAdapter(fragmentManager: FragmentManager, private val fragmentList: List<BaseFragment>) :
FragmentPagerAdapter(fragmentManager, fragmentList.size) {
override fun getCount() = fragmentList.size
override fun getItem(position: Int): Fragment {
return fragmentList.get(position)
}
override fun getPageTitle(position: Int): CharSequence? {
return fragmentList.get(position).pageTitle
}
}
class PageAdapter(碎片管理器:碎片管理器,私有val碎片列表:列表):
FragmentPagerAdapter(fragmentManager,fragmentList.size){
重写fun getCount()=fragmentList.size
覆盖趣味getItem(位置:Int):片段{
返回碎片列表。获取(位置)
}
覆盖有趣的getPageTitle(位置:Int):字符序列{
返回碎片列表。获取(位置)。页面标题
}
}
您可以传递包含这些片段的列表,并按位置获取片段。对于标题,创建一个包含“title”属性的“BaseFragment”。但是我如何创建这些片段的列表?我不理解@kagkarthanks For reply…..选项卡名称是否以小写字母显示