学习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"?>
<navigation 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">
    <fragment
        android:id="@+id/oneFragment"
        android:name="com.yucihan.navigation.OneFragment"
        android:label="One"
        tools:layout="@layout/fragment_one">            <action        android:id="@+id/action_oneFragment_to_twoFragment"        app:destination="@id/twoFragment" />   </fragment>
    <fragment
        android:id="@+id/twoFragment"
        android:name="com.yucihan.navigation.TwoFragment"
        android:label="Two"
        tools:layout="@layout/fragment_two" />
</navigation>在设计中可以通过切换Design/Text进行编辑和查看,或可以直接通过Design进行手动添加片段
导航文件还可以添加action/fragment,并且action可以添加切换动画效果。类似这样代码结构:
    <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 <Button>(R.id.btn_ navigate_action).setOnClickListener { v - >
 Navigation.findNavController(v).navigate(R.id.acton_oneFragment_to_twoFragment)
  }    
或者可以通过createNavigateOnClickListener()导航跳转到TwoFragment。
view.findViewById <Button>(R.id.btn_ navigate_action )?. setOnClickListener(  
    Navigation.createNavigateOnClickListener(R.id.acton_oneFragment_to_twoFragment,null
接下来可以运行查看实验效果咯。

如果想实现应用常用的导航栏效果,可以通过使用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"

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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值