Обработка Kotlin OnBackPressed и BottomNavigationView между фрагментом - PullRequest
0 голосов
/ 06 января 2019

У меня есть активность с 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 ?

Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...