Android-Jetpack-Navigation组件使用示例
作者:阿博聊编程
这篇文章主要介绍了Android-Jetpack-Navigation组件使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
Navigation的优势
可能有部分Android开发的小伙伴见过单Activity多Fragment
的App
,使用起来非常的流畅或者说非常的丝滑。自己想要尝试这种开发模式的时候,又会发现Fragment
的管理会比较麻烦。现在不用怕了,Android SDK
为了我们提供了Navigation
来实现这种开发模式。希望这篇文章对小伙伴们有所启发。
先来说说使用Navigation
的优势:
- 可以可视化页面的导航,可以帮我们快速理清页面之间的关系;
- 通过
destination
和action
完成页面之间的导航; - 方便我们添加页面的切换动画;
- 页面之间类型安全的参数传递;
- 通过
NavigationUI
类,对菜单、底部导航、抽屉菜单导航进行统一的管理; - 支持深层链接
DeepLink
(深层链接)。
project的Navigation依赖设置
dependencies { def nav_version = "2.4.2" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" }
module的Navigation依赖设置
plugins { id 'androidx.navigation.safeargs' }
Java版本:
implementation "androidx.navigation:navigation-fragment:2.4.1" implementation "androidx.navigation:navigation-ui:2.4.1"
Kotlin版本:
implementation "androidx.navigation:navigation-fragment-ktx:2.4.1" implementation "androidx.navigation:navigation-ui-ktx:2.4.1"
Compose版本:
implementation "androidx.navigation:navigation-compose:2.4.1"
Navigation的主要因素
Navigation Graph
,新型的XML资源文件,其中包含App
所有的页面,以及页面之间的关系。NavHostFragment
,特殊的Fragment
,我们可以认为是一个Fragment
的容器,Navigation Graph
中的Fragment
都是通过NavHostFragment
进行展示。NavController
,在代码当中完成Navigation Graph
中的页面切换工作。
Navigation代码示例
1.在res创建navigation资源文件夹,在navigation
创建nav_graph.xml
文件。
2.在activity_main.xml
,内容详情如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <fragment android:id="@+id/nav_host_fragment" android:layout_width="match_parent" android:layout_height="match_parent" android:name="androidx.navigation.fragment.NavHostFragment" app:navGraph="@navigation/nav_graph" app:defaultNavHost="true"/> </LinearLayout>
属性说明如下:
android:name="androidx.navigation.fragment.NavHostFragment"
,告诉系统这是一个特殊的Fragment
。app:defaultNavHost="true"
,表示Fragment
会自动处理系统返回键,当用户做返回操作的时候会退出当前的Fragment
.app:navGraph="@navigation/nav_graph"
,导航视图。
在nav_graph.xml创建两个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/nav_graph" app:startDestination="@id/mainFragment"> <fragment android:id="@+id/mainFragment" android:name="com.yb.test.MainFragment" android:label="fragment_main" tools:layout="@layout/fragment_main"> <action android:id="@+id/action_mainFragment_to_secondFragment" app:destination="@id/secondFragment" /> </fragment> <fragment android:id="@+id/secondFragment" android:name="com.yb.test.SecondFragment" android:label="fragment_second" tools:layout="@layout/fragment_second" /> </navigation>
NavControIIer实现导航功能
我们在MainFragment
中创建按钮,设置按钮的点击事件:
view.findViewById<Button>(R.id.btn).setOnClickListener { Navigation.findNavController(it).navigate(R.id.action_mainFragment_to_secondFragment) }
大概的实现就是这样子,感兴趣的小伙伴可以尝试一下。
以上就是Android-Jetpack-Navigation组件使用示例的详细内容,更多关于Android-Jetpack-Navigation组件的资料请关注脚本之家其它相关文章!