学习Android JetPack开发工具包中的导航架构组件

本文介绍Android Studio集成Kotlin开发,在开发学习导航架构组件之前,需要通过Android Studio配置导航组件的依赖库。并且Android Studio版本必须大于3.2 Canary 14或更高。此处省略初始化项目创建过程。

打开项目根目录的应用程序目录下的的的的build.gradle,添加以下依赖库。

dependencies {
    def nav_version = "1.0.0-alpha01"

    implementation "android.arch.navigation:navigation-fragment:$nav_version" // use -ktx for Kotlin
    implementation "android.arch.navigation:navigation-ui:$nav_version" // use -ktx for Kotlin

    // optional - Test helpers 用于单元测试,可不用添加
    androidTestImplementation "android.arch.navigation:navigation-testing:$nav_version" // use -ktx for Kotlin
}

定位到项目中的资源目录下,创建³³ 导航文件夹数,再在该文件夹下创建nav_graph.xml导航文件。

xml version="1.0" encoding="utf-8"?>
 xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    app:startDestination="@id/blankFragment">
    
        android:id="@+id/oneFragment"
        android:name="com.yucihan.navigation.OneFragment"
        android:label="One"
        tools:layout="@layout/fragment_one">                    android:id="@+id/action_oneFragment_to_twoFragment"        app:destination="@id/twoFragment" />   
    
        android:id="@+id/twoFragment"
        android:name="com.yucihan.navigation.TwoFragment"
        android:label="Two"
        tools:layout="@layout/fragment_two" />
在设计中可以通过切换Design/Text进行编辑和查看,或可以直接通过Design进行手动添加片段
导航文件还可以添加action/fragment,并且action可以添加切换动画效果。类似这样代码结构:
    
        android:id="@+id/confirmationAction"
        app:destination="@id/confirmationFragment"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popEnterAnim="@anim/slide_in_left"
        app:popExitAnim="@anim/slide_out_right" />

在MainActivity文件的布局文件中添加以下布局代码

?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        app:navGraph="@navigation/nav_graph"
        app:defaultNavHost="true"
        />

android.support.constraint.ConstraintLayout>

在MainActivity文件中复写onSupportNavigateUp()方法并添加以下代码。

Navigation.findNavController(thisR.id.nav_host_fragment) .navigateUp()

在OneFragment片段文件的布局中添加一个按钮,并设置按钮的点击事件,并添加点击事件执行内容,代码如下所示。

view.findViewById 
或者可以通过createNavigateOnClickListener()导航跳转到TwoFragment。
view.findViewById 
接下来可以运行查看实验效果咯。

如果想实现应用常用的导航栏效果,可以通过使用NavigationView或者BottomNavigationView来实现。反正记住一点导航框架组件是通过指定ID或是视图来导航跳转切换页面。

如果想取代片段之间不安全的旧的传值方式,可以使用类型安全的传值方式。在项目根目录的的的的build.gradle文件下添加此依赖。

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha01"
    }
}

并在应用程序目录下的的的的build.gradle文件中添加以下插件,然后就可以取代getArguments()通过ConfirmationFragmentArgs取参数。

apply plugin: "androidx.navigation.safeargs"

通过浏览器跳转连接到应用程序中的任何一个片段中。在导航导航文件的片段中添加如下代码

 app:uri="http://www.example.com/users/{id}"/>
并在 manifest.xml文件中的文件中的活动标签中添加
 android:value="@navigation/main_nav" />



你可能感兴趣的:(Android)