本文介绍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(this,R.id.nav_host_fragment) .navigateUp()
在OneFragment片段文件的布局中添加一个按钮,并设置按钮的点击事件,并添加点击事件执行内容,代码如下所示。
view.findViewById navigate_action).setOnClickListener { v - > Navigation.findNavController(v).navigate(R.id.acton_oneFragment_to_twoFragment) }
或者可以通过createNavigateOnClickListener()导航跳转到TwoFragment。
view.findViewById 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"
通过浏览器跳转连接到应用程序中的任何一个片段中。在导航导航文件的片段中添加如下代码
app:uri="http://www.example.com/users/{id}"/>
并在
manifest.xml文件中的文件中的活动标签中添加
android:value="@navigation/main_nav" />