Kotlin - Handling Back Button Klicken Sie in Navigation Drawer - Android
Ich habe Navigation Drawer in Android implementiert.
Funktioniert gut.
Die onBackPressed-Methode ist ebenfalls implementiert.
Funktioniert gut.
Jetzt möchte ich die Funktionalität der onBackPressed () -Methode beim Klicken auf die Schaltfläche "Zurück" in der Navigationsleiste. (Die Schaltfläche "Zurück" befindet sich in der Navigationsleiste.)
Ich habe die Schaltfläche "Zurück" wie folgt eingestellt:
// Set back button
mFragmentManager.addOnBackStackChangedListener(FragmentManager.OnBackStackChangedListener {
if (mFragmentManager.backStackEntryCount > 0) {
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
} else {
supportActionBar!!.setDisplayHomeAsUpEnabled(false)
mToggle.syncState()
}
})
Um nun auf die Schaltfläche Zurück zu klicken, habe ich die folgende Methode implementiert:
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home-> {
Toast.makeText(this, "Back pressed", Toast.LENGTH_SHORT)
.show();
onBackPressed();
}
}
return super.onOptionsItemSelected(item)
}
Dieser Toast im Inneren wird jedoch nicht angezeigt, sondern öffnet nur meine Navigationsschublade.
Was könnte das Problem sein? Vielen Dank.
EDIT:
Unten ist der Code zum Öffnen der Schublade, dh wie folgt:
mToggle = ActionBarDrawerToggle(
this,
mDrawer,
toolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close
)
mDrawer.addDrawerListener(mToggle)
mToggle.syncState()
Setzen Sie hier einfach einen ActionBarDrawerToggle auf Navigation Drawer. Also, Schublade öffnen, wenn ich auf HumberIcon klicke.
Unten ist die onBackPressed () -Methode in meiner Aktivität:
if (mDrawer.isDrawerOpen(GravityCompat.START)) {
mDrawer.closeDrawer(GravityCompat.START)
} else {
if (mFragmentManager.backStackEntryCount > 0) {
mFragmentManager.popBackStack()
nav_view.setCheckedItem(R.id.nav_home_fragment)
} else {
if (mFragmentManager.findFragmentById(R.id.fragment_container) is SecondFragment) {
mFragmentManager.popBackStack()
nav_view.setCheckedItem(R.id.nav_home_fragment)
} else {
super.onBackPressed()
}
}
}
}
Antworten
Wenn Ihre Symbolleiste in Ordnung ist, können Sie Folgendes verwenden, um mit NavComponent eine zurückzukehren.
findNavController().popBackStack()
Wenn es ein Problem mit Ihrer Symbolleiste gibt, teilen Sie die entsprechenden Codes mit.