版权声明:本文为博主原创文章,未经博主容许不得转载。html
转载请代表出处:http://www.javashuo.com/article/p-cbzjqeaz-hb.htmlandroid
Navigation组件是AndroidStudio3.2版本更新带来的新组件,其特色是在一个Activity中使用多个Fragment处理平滑用户操做,且能够统一进场,退场,弹出,隐藏动画,可视化处理Action,支持深层连接(不在同一个Activity时能够弹出跳转,底层是BroadcastReceiver),支持以少许代码链接底部导航或者链接ActionBar菜单或者链接Drawlayout的MenuItem,且导航时提供了类型安全(SafeArgs)。好处说了那么多,下面我们来看看具体如何使用吧!git
教程githubgithub
关于Navigation你须要知道以下三个组件设计模式
这是Navigation的导航图,位于res/navigation/
目录下的xml文件, 其有两个模式,Design
(可视化设计模式)和Text
(文字模式),在Design
可视化环境下能够对整个Navigation
作新建等操做,在Text
模式下可进行代码声明,以下所示:安全
<fragment android:id="@+id/home_dest" android:name="com.example.android.codelabs.navigation.HomeFragment" android:label="@string/home" tools:layout="@layout/home_fragment"> <action android:id="@+id/next_action" app:destination="@+id/flow_step_one_dest" app:enterAnim="@anim/slide_in_right" app:exitAnim="@anim/slide_out_left" app:popEnterAnim="@anim/slide_in_left" app:popExitAnim="@anim/slide_out_right" /> </fragment>
每一个Navigation
图都有一个起始的Fragment,这个Fragment将做为栈底(压栈,相似Activity的启动栈),其在布局文件中以下声明:网络
<fragment android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/my_nav_host_fragment" android:name="androidx.navigation.fragment.NavHostFragment" app:navGraph="@navigation/nav_graph" app:defaultNavHost="true" />
android:name
和app:defaultNavHost="true"
是声明启动的Fragment为NavHostFragment
app:navGraph
是将此fragment与Navigation graph
作关联NavController是一个跟踪Navigation graph
当前位置的对象,主要协调NavHostFragment
显示对应的Fragment,可经过NavController控制跳转逻辑,安全传参(SafeArgs后面讲解)架构
使用SafeArgs
须要导入Gradle插件(详情看注意事项第4点),在传值类型会自动生成对应类型的class,因此官方推介使用SafeArgs进行传参app
app\src\main\res\navigation\nav_graph
文件(此文件就是上面提到的Navigation graph)Design
模式,在里面找到一个绿色的+号New Destination
,在弹出的窗口内选择SettingFragment
,恭喜你目前已经掌握添加一个Fragment到Navigation EditMainFragment
,在onCreateView
中加入NavController navController = NavHostFragment.findNavController(MainFragment.this); navController.navigate(R.id.twoFragment);
,这段代码意味着我们从前面认识到的NavHostFragment中找到NavController,后面经过获得的NavController导航到ID叫R.id.twoFragment
的目标TwoFragment
,在onCreateView
中加入NavController navController = NavHostFragment.findNavController(TwoFragment.this); navController.navigate(R.id.mainFragment);
,这段代码意味着我们从前面认识到的NavHostFragment中找到NavController,后面经过获得的NavController导航到ID叫R.id.mainFragment
的目标Navigation文档ide
原文出处:https://www.cnblogs.com/cavalier-/p/10429936.html