Tabs


class TabsFragment: FragmentViewModel<TabsViewModel>(R.layout.fragment_tabs),
    ViewTabs
{
    override fun onViewCreated(...)
    {
        super.onViewCreated(...)

        tabs.adapter = TabsAdapter(routerTabs, childFragmentManager, lifecycle)
        // Make offscreenPageLimit equals to number of pages
        tabs.offscreenPageLimit = TABS_MAP.size

        // Navigate to tab with index
        bottomNavigationView.setOnItemSelectedListener {
            routerTabs.route(TABS_MAP[it.itemId]!!)
        }

        // Add close tab stack to top behavior
        bottomNavigationView.setOnItemReselectedListener {
            routerTabs[TABS_MAP[it.itemId]!!].closeTabToTop()
        }

        // Give Router opportunity to change tabs
        routerTabs.tabChangeCallback = {
            bottomNavigationView.selectedItemId = TABS_BACK_MAP[it]!!
            tabs.setCurrentItem(it, false)
        }
    }

    companion object
    {
        val TABS_MAP = mutableMapOf(...) // tabId to tab's index
        val TABS_BACK_MAP = mutableMapOf(...) // tab's index to tabId
    }
}

Full example

Last updated

Was this helpful?