Android-Jetpack-Navigation组件使用

手机游戏开发者 2024-9-23 22:41:11 82 0 来自 中国
大概有部门Android开发的小同伴见过单Activity多Fragment的App,使用起来非常的流通大概说非常的丝滑。本身想要实行这种开发模式的时间,又会发现Fragment的管分析比力贫困。如今不消怕了,Android SDK为了我们提供了Navigation来实现这种开发模式。渴望这篇文章对小同伴们有所启发。
Navigation的上风

先来说说使用Navigation的上风:

  • 可以可视化页面的导航,可以帮我们快速理清页面之间的关系;
  • 通过destination和action完成页面之间的导航;
  • 方便我们添加页面的切换动画;
  • 页面之间范例安全的参数通报;
  • 通过NavigationUI类,对菜单、底部导航、抽屉菜单导航举行同一的管理;
  • 支持深层链接DeepLink(深层链接)。
project的Navigation依赖设置

dependencies {   def nav_version = "2.4.2"   classpath "androidx.navigation:navigation-safe-args-gradle-pluginnav_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"    androidrientation="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",导航视图。
3.在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>4.NavControIIer实现导航功能

我们在MainFragment中创建按钮,设置按钮的点击变乱:
view.findViewById<Button>(R.id.btn).setOnClickListener {   Navigation.findNavController(it).navigate(R.id.action_mainFragment_to_secondFragment)}大概的实现就是如许子,感兴趣的小同伴可以实行一下。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-12-4 01:13, Processed in 0.187709 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表