Sha*_*ran 8 android android-architecture-components android-architecture-navigation
在新的Navigation架构组件中,如何实现条件导航?
目前我有一个使用LoginFragment和HomeFragment的活动.基于某个login_flag,我曾经调用MainActivity中的任一片段.由于LoginFragment只被调用一次,我已将startDestination设置为HomeFragment,导航加载此HomeFragment.有没有办法在导航加载HomeFragment之前检查login_flag.
这就是我处理条件导航的方式:
为 LoginFragment创建全局操作
<action
android:id="@+id/action_global_loginFragment"
app:destination="@id/loginFragment"
app:launchSingleTop="false"
app:popUpTo="@+id/nav_graph"
app:popUpToInclusive="true" />
Run Code Online (Sandbox Code Playgroud)在内部执行条件导航onViewCreated:
// HomeFragment.kt
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if(!appAuth.isAuthenticated()) {
view.findNavController().navigate(R.id.action_global_loginFragment)
}
}
Run Code Online (Sandbox Code Playgroud)您可以在 Activity 中添加导航侦听器,然后根据您的条件导航到 LoginFragment,如下所示:
findNavController(nav_host_fragment).addOnNavigatedListener { controller, destination ->
when(destination.id) {
R.id.HomeFragment-> {
if(someCondition) {
//Navigate to LoginFragment
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2067 次 |
| 最近记录: |