How can i create dynamically tab with viewpager in android?

前端 未结 4 1245
别那么骄傲
别那么骄傲 2021-02-02 14:47

Explanation:

Suppose, I have multiple categories which come from my REST. I don\'t know how many categories it\'s mat be 5,7 or sometimes 2 etc. I want

4条回答
  •  青春惊慌失措
    2021-02-02 15:27

    For Kotlin

    After you get categoriy size, you can add dynamic tabs as per your categories size as below:

    class CategoryActivity : AppCompatActivity() {
    
        lateinit var binding: ActivityCategoryBinding
        var numberOfCat: Int? = -1
    
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            binding = DataBindingUtil.setContentView(this,R.layout.activity_category)
    
            numberOfCat = 10
            for (i in 0..numberOfCat!!){
                tabs_main.addTab(tabs_main.newTab().setText("Hello Fragment"))
            }
            var pagerViewAdapter = CategoryViewPagerAdapter(supportFragmentManager,tabs_main.tabCount,str)
            viewpager_main.adapter = pagerViewAdapter
            viewpager_main.adapter = pagerViewAdapter
    
            tabs_main.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener{
                override fun onTabReselected(p0: TabLayout.Tab?) {
    
                }
    
                override fun onTabSelected(p0: TabLayout.Tab?) {
                    viewpager_main.currentItem = p0!!.position
                }
    
                override fun onTabUnselected(p0: TabLayout.Tab?) {
    
                }
            })
    
        }
    }
    

    And here is your adapter class:

    class CategoryViewPagerAdapter(fm: FragmentManager, numberOfTabs: Int, title: String): FragmentPagerAdapter(fm) {
    
        var fragment: Fragment? = null
        var noOfTabs: Int = numberOfTabs
        var title: String = title
    
        override fun getItem(position: Int): Fragment {
            for (i in 0..noOfTabs){
                if (i == position){
                    fragment = CommonFragmentForCategory.newInstance(title = title)
                    break
                }
            }
            return fragment!!
        }
    
        override fun getCount(): Int {
            return noOfTabs
        }
    
        override fun getPageTitle(position: Int): CharSequence? {
            return super.getPageTitle(position)
        }
    }
    

提交回复
热议问题