Я новичок в компонентах навигации. Кроме того, я реализовал компонент навигации для своего приложения, у меня есть одно действие, в котором размещено несколько фрагментов, и дизайн такой, что фрагмент средства запуска, который равен LoginFragment
, не должен зависеть от BottomView
, в котором есть About, Why, Gallery, Press Release Пункты меню. Что я делаю, так это то, что я загружаю график аутентификации и график навигации нижнего вида в одном и том же фрагменте, но проблема в том, что навигационный контроллер проверяет их начальное место назначения, если пользователь находится в их начальном месте назначения. BottomView
начальный пункт назначения, но мне нужно что-то другое, я хочу отправить пользователя на LoginFragment
вместо завершения действия
Проверьте изображение ниже
![Check the image below](https://i.stack.imgur.com/P0XWt.png)
Фрагмент кода
Nav Controller OnBackPressed
@SuppressLint("RestrictedApi")
fun onBackPressed() {
val navController = fragmentManager.findFragmentById(containerId)!!
.findNavController()
when {
navController.backStack.size > 2 ->{
navController.popBackStack()
}
// Fragment back stack is empty so try to go back on the navigation stack
navigationBackStack.size > 1 -> {
Log.d(TAG, "logInfo: BNC: backstack size > 1")
// Remove last item from back stack
navigationBackStack.removeLast()
// Update the container with new fragment
onNavigationItemSelected()
}
// If the stack has only one and it's not the navigation home we should
// ensure that the application always leave from startDestination
navigationBackStack.last() != appStartDestinationId -> {
Log.d(TAG, "logInfo: BNC: start != current")
navigationBackStack.removeLast()
navigationBackStack.add(0, appStartDestinationId)
onNavigationItemSelected()
}
// Navigation stack is empty, so finish the activity
else -> {
Log.d(TAG, "logInfo: BNC: FINISH")
activity.finish()
}
}
}
Основной код активности
Настройка навигации График для аутентификации, т.е. вход, регистрация
private fun createNavHost(){
val isSessionActive = intent.getBooleanExtra("isSessionActive", false)
val navHost = if (isSessionActive) {
MainNavHostFragment.create(
R.navigation.active_session_nav_graph
)
} else {
MainNavHostFragment.create(
R.navigation.main_nav_graph
)
}
supportFragmentManager.beginTransaction()
.replace(
R.id.main_fragments_container,
navHost,
getString(R.string.MainNavHost)
)
.setPrimaryNavigationFragment(navHost)
.commit()
}
График навигации для просмотра снизу
private val bottomNavController by lazy(LazyThreadSafetyMode.NONE) {
BottomNavController(
this,
R.id.main_fragments_container,
R.id.menu_nav_info,
this)
}
Есть ли лучший подход для достижения этого варианта использования?