Navigation是指允许用户在应用程序中浏览、进入和退出不同内容的Fragment。Navigation能够实现从简单的按钮单击到更复杂的模式,如应用程序栏和导航抽屉。导航组件还通过遵循一套既定的原则来确保一致和可预测的用户体验。
来看下Navigation的原则吧:
这些原则,无疑都是为了带给用户良好的体验,也是我们应该遵守的。
Navigation:有三个主要的部分:
Google官方也指出了使用Navigation具有以下优点:
方便的处理Fragment事务正确的处理标题栏的回退与实体返回键实现过渡动画的统一管理实现并处理Deep link用最少的工作完成导航栏的UI设计Safe Args:在Fragment切换是提供类型安全的数据支持viewmodel具体实现新建两个Fragment,HomeFragment和DetailFragment。
在Activity中为Fragment添加NavHost容器。
NavActivity.java
<fragment androID:ID="@+ID/fragment" androID:name="androIDx.navigation.fragment.NavHostFragment" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" app:defaultNavHost="true" app:navGraph="@navigation/nav" />
再新建navigation文件夹新建Navigation graph。添加Fragment到其中
建立Fragment之间的跳转关系,当然也可以直接在xml文件里写,不过这样会有点麻烦。
nav.xml
<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" app:startDestination="@ID/homeFragment"> <fragment androID:ID="@+ID/homeFragment" androID:name="com.hao.jetpackdemo.navigation.HomeFragment" androID:label="home" tools:layout="@layout/home_fragment"> <action androID:ID="@+ID/action_homeFragment_to_detailFragment2" app:destination="@ID/detailFragment" app:enteranim="@anim/nav_default_pop_enter_anim" app:exitAnim="@anim/nav_default_pop_exit_anim" /> </fragment> <fragment androID:ID="@+ID/detailFragment" androID:name="com.hao.jetpackdemo.navigation.DetailFragment" androID:label="detail" tools:layout="@layout/fragment_detail"> <action androID:ID="@+ID/action_detailFragment_to_homeFragment" app:destination="@ID/homeFragment" app:enteranim="@anim/nav_default_pop_enter_anim" app:exitAnim="@anim/nav_default_pop_exit_anim" /> </fragment></navigation>
现在便可以来具体实现跳转了。
HomeFragment.java
public class HomeFragment extends Fragment { @OverrIDe public VIEw onCreateVIEw(@NonNull LayoutInflater inflater, @Nullable VIEwGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.home_fragment, container, false); } @OverrIDe public voID onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Objects.requireNonNull(getVIEw()).findVIEwByID(R.ID.button) .setonClickListener(Navigation.createNavigateOnClickListener(R.ID.action_homeFragment_to_detailFragment2)); }}
其实createNavigateOnClickListener()
也就是对onClickListener进行了封装,,,怎么说嘞,Jetpack里面对很多对象都进行了进一步的封装,虽然简化了开发的代码量,但是想要弄清原理就更要麻烦点了。
好了,Navigation的初步使用也就到这了
这里也没有很大的变化,也是通过Bundle来传递的,然后接收方通过getArguments()来获取到对应的Bundle从而取出数据
Fragment转换动画也是可以直接在Navigation graph中直接设置转换动画,说真的极大减少了工作量。
配合viewmodel、Databinding、liveData使用借用https://www.bilibili.com/video/av61814701中的图片
其实和前面的 *** 作也都差不多,只不过两个Fragment共享一个viewmodel。 总结
以上是内存溢出为你收集整理的Android Jetpack -- Navigation篇全部内容,希望文章能够帮你解决Android Jetpack -- Navigation篇所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)