Last active
August 25, 2017 14:17
-
-
Save Miha-x64/1b4afaebe7dd1f0718225a2d6199c223 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 MainActivity : AppCompatActivity(), | |
NavigationView.OnNavigationItemSelectedListener, FragmentManager.OnBackStackChangedListener { | |
private lateinit var drawer: DrawerLayout | |
private lateinit var toggle: ActionBarDrawerToggle | |
private lateinit var navigation: NavigationView | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
// init UI | |
val toolbar = // ... | |
setSupportActionBar(toolbar) | |
drawer = // ... | |
toggle = ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) | |
toggle.setToolbarNavigationClickListener { super.onBackPressed() } | |
drawer.addDrawerListener(toggle) | |
toggle.syncState() | |
if (savedInstanceState == null) { | |
openFragmentRoot(State.currentScreen) | |
} else { | |
onBackStackChanged() // sync state | |
} | |
} | |
override fun onResume() { | |
super.onResume() | |
supportFragmentManager.addOnBackStackChangedListener(this) | |
} | |
override fun onPause() { | |
supportFragmentManager.removeOnBackStackChangedListener(this) | |
super.onPause() | |
} | |
override fun onBackPressed() = | |
if (drawer.isDrawerOpen(GravityCompat.START)) { | |
drawer.closeDrawer(GravityCompat.START) | |
} else { | |
super.onBackPressed() | |
} | |
override fun onBackStackChanged() { | |
val burgerAccessible = supportFragmentManager.backStackEntryCount == 0 | |
if (toggle.isDrawerIndicatorEnabled != burgerAccessible) { | |
toggle.isDrawerIndicatorEnabled = burgerAccessible | |
if (!burgerAccessible) { | |
supportActionBar!!.let { | |
it.setDisplayHomeAsUpEnabled(true) | |
it.setHomeAsUpIndicator(R.drawable.abc_ic_ab_back_material) | |
} | |
} | |
} | |
} | |
override fun onNavigationItemSelected(item: MenuItem): Boolean { | |
drawer.closeDrawer(GravityCompat.START) | |
openFragmentRoot(item.itemId) | |
return true | |
} | |
internal fun openFragmentRoot(@NavItem navItemId: Int) { | |
supportFragmentManager.let { | |
while (it.backStackEntryCount > 0) it.popBackStackImmediate() | |
it | |
.beginTransaction() | |
.replace(R.id.content, NAV_FRAGMENTS[navItemId]!!()) | |
.commitNow() | |
State.currentScreen = navItemId | |
navigation.menu.findItem(navItemId).isChecked = true // needed when was no explicit click (eg. restoring from prefs) | |
onBackStackChanged() | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment