Sal*_*van 7 authentication android android-jetpack android-architecture-navigation
今天我开始使用 Android 的导航组件在我的应用程序中实现身份验证流程。这个想法很简单:用户启动应用程序,如果她通过了身份验证,它会显示一个 UI,如果她没有通过身份验证,则显示另一个 UI。
我所做的是在我HomeFragment
的onViewCreated
方法,我检查,如果用户通过验证后,如果她不是我叫NavController
的navigate()
通过传递,将导航到一个动作的标识方法AuthenticationFragment
。一切正常,直到用户在 中单击后退按钮AuthenticationFragment
,因为然后我收到此错误。我仍然不知道该错误的实际原因是什么,但是导航发生得太快的想法似乎与我的情况相似:目的地首先从 切换AuthenticationFragment
到HomeFragment
然后立即从切换HomeFragment
到AuthenticationFragment
再次,因为HomeFragment
再次发现用户未通过身份验证.
尽管我遇到了错误,但这种方法对我来说仍然是错误的。HomeFragment
在她进行身份验证之前,用户不应该能够返回到(并且在片段立即来回切换时看到屏幕闪烁)。我还查看了这个Android 的官方实现身份验证流程指南,但对我来说这似乎也是错误的,因为那里涉及到多余的第三部分 UI(MainFragment
)。在我的情况下,我可以用闪屏替换它,但它仍然会留在后堆栈中,用户将能够返回闪屏,这显然是无稽之谈。
那么使用 Android 的新导航组件实现身份验证流程的正确方法是什么?我想要的功能是:如果用户未通过身份验证,那么她将被重定向到身份验证 UI,如果她从那里按下后退按钮,她应该退出应用程序。
更新:我知道我可以只收听 back press 事件并从那里关闭应用程序,但我仍然希望有一些使用 Android 导航组件的优雅解决方案。
小智 4
在您的登录片段中,您需要从主页片段声明“Pop up-to”操作。
“popUpToInclusive = true”从后台弹出给定的目的地
<fragment
android:id="@+id/loginFragment"
android:name="com.example.navigationsample.fragments.Login"
android:label="Login_Fragment"
tools:layout="@layout/layout_login">
<action
android:id="@+id/action_loginFragment_to_homeFragment"
app:destination="@id/homeFragment"
app:popUpTo="@id/loginFragment"
app:popUpToInclusive="true"/>
</fragment>
归档时间: |
|
查看次数: |
2536 次 |
最近记录: |