如何在多个片段后触发后退按钮转到主屏幕 Android
How To Trigger Back Button To Go To Home Screen After Multiple Fragment Android
所以我正在构建一个具有如下导航功能的应用程序:
登录片段(开始目的地)-> 初始设置片段-> 主页片段。
在 Login Fragment 中,检查用户是否使用 SharedPreference 登录。如果是这样,用户将被重定向到初始设置。
在Initial Setting Fragment中,有一个检查用户是否已经设置了一个帐户。如果是这样,用户将被重定向到 Home Fragment。
我想问的是,例如,我正在登录应用程序,我将被重定向到初始设置片段。因为我已经设置了帐户,应用程序将我重定向到 Home Fragment。那么,如何触发后退按钮转到主屏幕而不是上一个片段(初始片段)?
到目前为止我的理解是我需要从后台删除那些初始片段和登录片段。我尝试在我的 navigation.xml 上设置 PopUp Behavior,但仍然不起作用。
这是navigation.xml
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navigation"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="com.main.netwallet.login.LoginFragment"
android:label="fragment_login"
tools:layout="@layout/fragment_login" >
<action
android:id="@+id/action_loginFragment_to_registerFragment"
app:destination="@id/registerFragment" />
<action
android:id="@+id/action_loginFragment_to_initialSettingFragment"
app:destination="@id/initialSettingFragment" />
<action
android:id="@+id/action_loginFragment_to_homeFragment"
app:destination="@id/homeFragment" />
</fragment>
<fragment
android:id="@+id/registerFragment"
android:name="com.main.netwallet.register.RegisterFragment"
android:label="fragment_register"
tools:layout="@layout/fragment_register" >
<action
android:id="@+id/action_registerFragment_to_initialSettingFragment"
app:destination="@id/initialSettingFragment" />
</fragment>
<fragment
android:id="@+id/homeFragment"
android:name="com.main.netwallet.home.HomeFragment"
android:label="fragment_home"
tools:layout="@layout/fragment_home" >
<action
android:id="@+id/action_homeFragment_to_loginFragment"
app:destination="@id/loginFragment"
app:popUpTo="@id/initialSettingFragment"
app:popUpToInclusive="false" />
</fragment>
<fragment
android:id="@+id/initialSettingFragment"
android:name="com.main.netwallet.initialSetting.InitialSettingFragment"
android:label="InitialSettingFragment"
tools:layout="@layout/fragment_initial_setting">
<action
android:id="@+id/action_initialSettingFragment_to_homeFragment"
app:destination="@id/homeFragment"
app:popUpTo="@id/loginFragment"
app:popUpToInclusive="true" />
</fragment>
</navigation>
那么我需要改变什么?
提前致谢
PS。我也使用 findNavController.navigate(FragmentDirections.androidIdAction) 而不是 (R.id.fragmentId)
因为您使用的是 Jatpack Navigation here 一切都通过示例和练习进行了解释。
另外,为了给您一个小总结,您需要在从一个片段导航到另一个片段时清除您的后台堆栈。
换句话说就是“不要追踪历史”。
所以我正在构建一个具有如下导航功能的应用程序:
登录片段(开始目的地)-> 初始设置片段-> 主页片段。
在 Login Fragment 中,检查用户是否使用 SharedPreference 登录。如果是这样,用户将被重定向到初始设置。
在Initial Setting Fragment中,有一个检查用户是否已经设置了一个帐户。如果是这样,用户将被重定向到 Home Fragment。
我想问的是,例如,我正在登录应用程序,我将被重定向到初始设置片段。因为我已经设置了帐户,应用程序将我重定向到 Home Fragment。那么,如何触发后退按钮转到主屏幕而不是上一个片段(初始片段)?
到目前为止我的理解是我需要从后台删除那些初始片段和登录片段。我尝试在我的 navigation.xml 上设置 PopUp Behavior,但仍然不起作用。
这是navigation.xml
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navigation"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="com.main.netwallet.login.LoginFragment"
android:label="fragment_login"
tools:layout="@layout/fragment_login" >
<action
android:id="@+id/action_loginFragment_to_registerFragment"
app:destination="@id/registerFragment" />
<action
android:id="@+id/action_loginFragment_to_initialSettingFragment"
app:destination="@id/initialSettingFragment" />
<action
android:id="@+id/action_loginFragment_to_homeFragment"
app:destination="@id/homeFragment" />
</fragment>
<fragment
android:id="@+id/registerFragment"
android:name="com.main.netwallet.register.RegisterFragment"
android:label="fragment_register"
tools:layout="@layout/fragment_register" >
<action
android:id="@+id/action_registerFragment_to_initialSettingFragment"
app:destination="@id/initialSettingFragment" />
</fragment>
<fragment
android:id="@+id/homeFragment"
android:name="com.main.netwallet.home.HomeFragment"
android:label="fragment_home"
tools:layout="@layout/fragment_home" >
<action
android:id="@+id/action_homeFragment_to_loginFragment"
app:destination="@id/loginFragment"
app:popUpTo="@id/initialSettingFragment"
app:popUpToInclusive="false" />
</fragment>
<fragment
android:id="@+id/initialSettingFragment"
android:name="com.main.netwallet.initialSetting.InitialSettingFragment"
android:label="InitialSettingFragment"
tools:layout="@layout/fragment_initial_setting">
<action
android:id="@+id/action_initialSettingFragment_to_homeFragment"
app:destination="@id/homeFragment"
app:popUpTo="@id/loginFragment"
app:popUpToInclusive="true" />
</fragment>
</navigation>
那么我需要改变什么?
提前致谢
PS。我也使用 findNavController.navigate(FragmentDirections.androidIdAction) 而不是 (R.id.fragmentId)
因为您使用的是 Jatpack Navigation here 一切都通过示例和练习进行了解释。
另外,为了给您一个小总结,您需要在从一个片段导航到另一个片段时清除您的后台堆栈。 换句话说就是“不要追踪历史”。