这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战
组件简介
导航是指支持用户导航、进入和退出应用中不同内容片段的交互。Android Jetpack 的导航组件可帮助您实现导航,无论是简单的按钮点击,还是应用栏和抽屉式导航栏等更为复杂的模式,该组件均可应对。导航组件还通过遵循一套既定原则来确保一致且可预测的用户体验。
官方资源链接
官方文档:Introducing Navigation Component
官方教程:Jetpack 导航
Google官方实验室Demo: android-navigation
背景
由于项目起初订的框架为整个APP以Fragment为主, 如果通过FragmentManager进行管理,这种方式很容易造成代码臃肿,难以维护。正好接触到了Navigation就大胆的尝了一次鲜,由于Fragment默认为系统跳转动画, 有些时候不太符合产品需求, 故进行了跳转动画设置
使用
查找资料得到官方跳转动画指定 代码修改如下
<?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">
<fragment
android:id="@+id/fragment_forget_email"
android:name="com.ihealthlabs.covidtest.ui.user.ForgetEmailFragment"
tools:layout="@layout/fragment_forget_email">
<action
android:id="@+id/action_fragment_forget_email_to_forget_phone"
app:destination="@id/fragment_forget_phone"
app:enterAnim="@anim/slide_in_top"
app:exitAnim="@anim/slide_out_bottom" />
</fragment>
<fragment
android:id="@+id/fragment_forget_phone"
android:name="com.ihealthlabs.covidtest.ui.user.ForgetPhoneFragment"
tools:layout="@layout/fragment_forget_phone">
<action
android:id="@+id/action_fragment_forget_phone_to_forget_email"
app:destination="@id/fragment_forget_phone"
app:enterAnim="@anim/slide_in_bottom"
app:exitAnim="@android:anim/fade_out"/>
</fragment>
</navigation>
在页面中调用如下方法即可跳转,返回也是如此
findNavController().navigate(R.id.action_fragment_forget_email_to_forget_phone)
按照上面的方法进行挑战是没问题, 但是返回的时候就会重新创建fragment, 经过查证, 此方法内部调用的是
replace
方法, 如果不想返回重新创建fragment, 改为调用findNavController().popBackStack()
即可, 如果需要弹出动画, 对应设置app:popEnterAnim
和app:popExitAnim
即可