Я новичок в архитектуре Android Jetpack Navigation.Я пробую это в новом приложении.Есть одно действие и несколько фрагментов, два из них - экран входа в систему и экран входа в систему электронной почты.Я определил эти фрагменты в моих навигационных XML.Приложение выглядит следующим образом:
Login screen
→ Email Login screen
Что я хочу, после перехода на экран входа в систему электронной почты, когда я нажимаю назад, приложение закрывается.Значение бэк-стека для экрана входа в систему удалено.Я знаю, что экраны входа в систему не должны работать таким образом, но я все еще просто выясняю.
Я следовал документации от Google Начало работы с компонентом навигации .Было сказано, что использование app:popUpTo
и apppopUpToInclusive="true"
должно очистить backstack, но когда я нажимаю обратно на экране входа в систему электронной почты, он все равно возвращается к входу в систему, а не к выходу.
Итак, вот что яя пробовал.
nav_main.xml
<fragment android:id="@+id/loginFragment"
android:name="com.example.myapp.ui.main.LoginFragment"
android:label="@string/login"
tools:layout="@layout/fragment_login" >
<action
android:id="@+id/action_login_to_emailLoginFragment"
app:destination="@id/emailLoginFragment"
app:popEnterAnim="@anim/slide_in_right"
app:popExitAnim="@anim/slide_out_right"
app:popUpTo="@+id/emailLoginFragment"
app:popUpToInclusive="true"/>
</fragment>
<fragment android:id="@+id/emailLoginFragment"
android:name="com.example.myapp.ui.main.EmailLoginFragment"
android:label="EmailLoginFragment"
tools:layout="@layout/fragment_login_email" />
LoginFragment.kt
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding.emailLoginButton.setOnClickListener {
findNavController().navigate(R.id.action_login_to_emailLoginFragment)
}
return binding.root
}
Я дал событие нажатия кнопки.В нем я использовал Navigation Controller, чтобы перейти к экрану входа в систему электронной почты, присвоив ему идентификатор действия.В <action>
есть app:popUpTo
и app:popUpToInclusive="true"
.
После прочтения документации снова и снова, а также после прочтения множества вопросов StackOverflow я обнаружил, что эти свойства должны удалить мой экран входа в системус заднего стека.Но они этого не делают.Кнопка переходит к экрану входа в систему электронной почты, но когда я нажимаю назад, она все равно возвращается к экрану входа в систему вместо выхода из приложения.Чего мне не хватает?