Last active
March 30, 2018 10:52
-
-
Save Stickerbox/0834bbe62604afd57c56ced8b8cec95e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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