#android #kotlin #navigation-drawer
#Android #kotlin #навигация-ящик
Вопрос:
Я реализовал навигационный ящик в Android.
Работает нормально.
Также реализован метод обратного нажатия.
Работает нормально.
Теперь я хочу, чтобы такая же функциональность метода onBackPressed () выполнялась при нажатии кнопки возврата в навигационном ящике. (Кнопка «Назад» установлена в панели навигации.)
Я установил кнопку со стрелкой назад, как показано ниже :
// Set back button
mFragmentManager.addOnBackStackChangedListener(FragmentManager.OnBackStackChangedListener {
if (mFragmentManager.backStackEntryCount > 0) {
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
} else {
supportActionBar!!.setDisplayHomeAsUpEnabled(false)
mToggle.syncState()
}
})
Теперь, чтобы нажать кнопку «Назад», я реализовал следующий метод :
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)
}
Но этот тост внутри не отображается, вместо этого он просто открывает мой навигационный ящик.
В чем может быть проблема? Спасибо.
Редактировать :
Ниже приведен код для открытия ящика, т.Е. Как показано ниже :
mToggle = ActionBarDrawerToggle(
this,
mDrawer,
toolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close
)
mDrawer.addDrawerListener(mToggle)
mToggle.syncState()
Здесь просто установите ActionBarDrawerToggle в панель навигации. Итак, ящик открывается, когда я нажимаю на HumberIcon.
Ниже приведен метод onBackPressed () внутри моей активности :
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()
}
}
}
}
Комментарии:
1. пожалуйста, опубликуйте код, который вы используете для открытия ящика
2. Я знаю, как вернуться назад. Я просто хочу выполнить обратную навигацию по нажатию кнопки «Назад» в левом верхнем углу навигационного ящика.
3. @Akki отредактировал вопрос. Пожалуйста, проверьте вопрос в разделе РЕДАКТИРОВАНИЯ. Спасибо.
Ответ №1:
Если ваша панель инструментов в порядке, вы можете использовать следующее, чтобы вернуться к ней с помощью NavComponent.
findNavController().popBackStack()
Если с вашей панелью инструментов возникла проблема, пожалуйста, поделитесь соответствующими кодами.
Комментарии:
1. Я знаю, как вернуться назад. Я просто хочу выполнить обратную навигацию по нажатию кнопки «Назад» в левом верхнем углу навигационного ящика.
Ответ №2:
Шаг 1: В вашем XML создайте панель инструментов сверху
<androidx.appcompat.widget.Toolbar
android:id="@ id/myToolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingEnd="@dimen/_5sdp"
app:popupTheme="@style/AppTheme.PopupOverlay" />
Шаг 2: затем привяжите верхнюю панель инструментов сверху текстом
with(binding) {
setContentView(root)
setToolbar("Top Nav Bar").toString().lowercase()
setToolbar() //<---- call this fun then (for back arrow in top left)
}
//===[ Handle your Top Left Back arrow button ]===
fun setToolbar() {
with(binding.appBar) {
setSupportActionBar(myToolbar)
supportActionBar?.setDisplayShowTitleEnabled(false)
myToolbar.navigationIcon = drawableColor(R.drawable.ic_back,R.color.black)
myToolbar.setNavigationOnClickListener { onBackPressed() }
myToolbar.setTitleTextColor(Color.BLACK)
}
}
Затем обработайте свой onBackPressed()
туда, куда вы хотите перенаправить.
Например:
override fun onBackPressed() {
super.onBackPressed()
launchActivity<MainActivity>()
}