無限スクロールのViewPager+TabLayout

class SampleInfinitePagerAdapter(
    fragmentManager: FragmentManager
) : FragmentStatePagerAdapter(fragmentManager) {
    companion object {
        const val MAX_PAGE_COUNT = 100
    }

    var list: List<Hogehoge> by Delegates.observable(emptyList()) { _, previous, latest ->
        notifyDataSetChanged()
    }
    private var realCount: Int = 0
        get() = list.size


    override fun getItem(position: Int): Fragment {
        var id = 0
        
        // listが空以外
        if (realCount > 0) {
            val diff = (position - MAX_PAGE_COUNT / 2) % realCount
            val index = if (0 > diff) realCount + diff else diff
            id = list[index].id
        }
        return SampleFragment.createInstance(id)
    }

 
    override fun getCount(): Int = MAX_PAGE_COUNT


    override fun getPageTitle(position: Int): CharSequence? {
        var title = ""

        // listが空以外
        if (realCount > 0) {
            val diff = (position - MAX_PAGE_COUNT / 2) % realCount
            val index = if (0 > diff) realCount + diff else diff
            title = list[index].title
        }

        return title
    }
}