Lou*_*sai 13 android android-architecture-components
我正在尝试新的导航架构组件,我无法弄清楚如何做到这一点:
我有1个活动(MainActivity)+ 3个碎片:
我想使用SplashFragment来确定我是否应该导航到MainFragment或SignUpFragment,但是一旦它到达那两个中的任何一个,你就不应该回弹到SplashFragment.我怎么能用新的导航组件做到这一点?
我popBackStack在调用之前和之后尝试过navigate(R.id.action_xxx),但是它们都没有工作(这有意义:在它没有任何东西可以弹出之前;它只是关闭刚刚添加的片段).这是否意味着唯一的方法是覆盖onBackPress拦截它并确保navigateUp在这些情况下不会调用?
谢谢!
Sub*_*haw 14
首先,添加属性app:popUpTo='your_nav_graph_id'并添加app:popUpToInclusive="true"到操作标签。
<fragment
android:id="@+id/signInFragment"
android:name="com.glee.incog2.android.fragment.SignInFragment"
android:label="fragment_sign_in"
tools:layout="@layout/fragment_sign_in" >
<action
android:id="@+id/action_signInFragment_to_usersFragment"
app:destination="@id/usersFragment"
app:launchSingleTop="true"
app:popUpTo="@+id/main_nav_graph"
app:popUpToInclusive="true" />
</fragment>
Run Code Online (Sandbox Code Playgroud)
其次,使用上述操作作为参数导航到目的地。
findNavController(fragment).navigate(SignInFragmentDirections.actionSignInFragmentToUserNameFragment())
Run Code Online (Sandbox Code Playgroud)
注意:如果使用方法导航navigate(@IdRes int resId),则不会获得期望的结果。因此,我使用了method navigate(@NonNull NavDirections directions)。
这在alpha05版本中对我有用。在操作标签中(在nav_graph.xml文件内部)添加app:popUpTo =“ @ id / nav_graph”。这里的“ @ id / nav_graph是我的图的ID,也称为根”。
<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/nav_graph"
app:startDestination="@id/startFragment">
.......
<action
android:id="@+id/action_startFragment_to_homeFragment"
app:destination="@id/homeFragment"
app:popUpTo="@id/nav_graph"/>
.......
Run Code Online (Sandbox Code Playgroud)
您也可以在设计标签中执行此操作:-选择“ SplashFragment”,然后选择要更改的操作,然后为“ Pop To”选择“ root”
| 归档时间: |
|
| 查看次数: |
6613 次 |
| 最近记录: |