У меня есть активность с FrameLayout
внутри и android.support.design.widget.BottomNavigationView
,
<android.support.constraint.ConstraintLayout
android:id="@+id/container"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/frame"
.../>
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
.../>
</android.support.constraint.ConstraintLayout>
У меня есть обработка onBackPressed для возврата предыдущего фрагмента
override fun onBackPressed() {
if(fragmentManager.backStackEntryCount > 0){
fragmentManager.popBackStack()
}else{
super.onBackPressed()
}
}
К сожалению, я не могу обработать выбранный элемент на BottomNavigationView
, я пробовал этот код ниже
override fun onBackPressed() {
if(fragmentManager.backStackEntryCount > 0){
if(navigation.selectedItemId != R.id.navigation_home){
navigation.selectedItemId = R.id.navigation_home
}
fragmentManager.popBackStack()
}else{
super.onBackPressed()
}
}
Но, похоже, мне нужно вернуться дважды, чтобы переключить предыдущий фрагмент. Даже я использовал popBackStackImmediate
и все же получил некоторый результат. После некоторого эксперимента, navigation.selectedItemId = R.id.navigation_home
сделать задержку на popBackStack
или popBackStackImmediate
. Пока я комментирую этот код, кажется, очень хорошо.
Что вызывает задержку в моем коде? Как обработать выбранный пункт на BottomNavigationView
? И как узнать, какой идентификатор предыдущего фрагмента, чтобы я мог выбрать правильный элемент в BottomNavigationView ?
Большое спасибо