Skip to content

Instantly share code, notes, and snippets.

@Stickerbox
Last active March 30, 2018 10:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Stickerbox/0834bbe62604afd57c56ced8b8cec95e to your computer and use it in GitHub Desktop.
Save Stickerbox/0834bbe62604afd57c56ced8b8cec95e to your computer and use it in GitHub Desktop.
class TabBarController : AppCompatActivity() {
private val adapter by lazy { TabAdapter(supportFragmentManager) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_tab_bar_controller)
tab_bar_container.adapter = adapter
tab_bar_container.offscreenPageLimit = adapter.count
tab_bar_container.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
override fun onPageSelected(position: Int) {
invalidateOptionsMenu()
}
})
tab_bar.setOnNavigationItemSelectedListener {
tabbar_container.currentItem = it.order
true
}
tab_bar.setOnNavigationItemReselectedListener {
adapter.getItem(tab_bar_container.currentItem).popToRoot()
}
}
override fun onBackPressed() {
if (!adapter.getItem(tab_bar_container.currentItem).onBackPressed()) {
super.onBackPressed()
}
}
class TabAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {
private val fragments = mutableMapOf<Int, NavigationController>()
override fun getItem(position: Int): NavigationController {
if (fragments[position] == null) {
fragments[position] = when (position) {
0 -> NavigationController.newInstance(HomeFragment())
1 -> NavigationController.newInstance(SearchFragment())
else -> throw IllegalArgumentException("Unsupported position: $position")
}
}
return fragments[position]!!
}
override fun getCount() = 2
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment