Мое приложение работает как мастер.У меня есть активность, которая служит централизацией для всех моих фрагментов.Существует BottomNavigationView с кнопкой «Далее», которая появляется в каждом фрагменте для управления мастером.
Когда я хочу перейти к следующему, я вызываю "action_next" из BottomNavMenu, и он переходит к следующему фрагменту.
Но мне нужно выполнить некоторые действия, когда пользователь нажимает кнопку Next в контекстеэтого фрагмента (например, хранить введенные данные).Кроме того, мне нужно отменить навигацию, если есть какие-либо проблемы с данными, введенными пользователем.
При первой попытке я сделал это в своем фрагменте:
val controller = NavHostFragment.findNavController(this)
controller.addOnNavigatedListener { controller, navDestination: NavDestination ->
when (navDestination.id) {
R.id.destination_setup_tournment -> {
proceedNavigation(controller, navDestination)
}
}
}
private fun proceedNavigation(controller: NavController, navDestination: NavDestination) {
val teams = teamAdapter.getItems()
if (validateSubmit(teams)){
presenter.saveTeams(teams)
}else{
//how to cancel navigation and stay on this fragment?
}
}
Но это не выглядит хорошим или даже правильным для меня, и я не знаю, как отменить навигацию, если что-тонеправильно.
Вот файлы, связанные с приложением:
MainActivity:
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?colorPrimary"
android:theme="@style/ToolbarTheme" />
<fragment
android:id="@+id/nav_host_fragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/navigation"
app:defaultNavHost="true" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:menu="@menu/bottom_nav"
style="@style/Widget.MaterialComponents.BottomNavigationView"
>
</com.google.android.material.bottomnavigation.BottomNavigationView>
bottom_nav.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_next" android:title="@string/tornment_mode" android:icon="@drawable/ic_navigate_next_black_24dp" />
</menu>