Android Navigation 初识

2018年Google I/O大会中推出的一个新的架构组件。

在此之前我使用过类似这种单Fragment构建App的框架,Zhuinden/simple-stack ,但是官方出手,最为致命,

本着不得不学的态度,我有必要去学习和使用它。

Google git 项目地址

官方文档

首先我们需要导入lib

 implementation "androidx.navigation:navigation-fragment-ktx:2.0.0"
    implementation "androidx.navigation:navigation-ui-ktx:2.0.0"

创建2个Fragment

class Page1Fragment:Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        return inflater.inflate(R.layout.fragment_page_1,container,false)

    }

}
class Page2Fragment:Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_page_2,container,false)

    }

  
}

这两个Fragment都只有一个Button

在res文件夹下创建一个navigation文件夹

在这个文件夹下创建一个xml 

如果没有该选项,可以在File ------> other Settings -->default Settings    Experimental 中勾选Enable Navigation Editor

重启Android Studio 即可

创建完xml  切换到Design视图,点击Add 添加你想要操作的Fragment 

切换回Text视图

<?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"
            android:id="@+id/test_navigation"
            app:startDestination="@id/page1Fragment">

    <fragment
        android:id="@+id/page1Fragment"
        android:name="sample.xietaichen.testnavigation.Page1Fragment"
        android:label="Page1Fragment">
        
        
    </fragment>
    <fragment
        android:id="@+id/page2Fragment"
        android:name="sample.xietaichen.testnavigation.Page2Fragment"
        android:label="Page2Fragment">
        
    </fragment>
</navigation>

给page1Fragment 添加action  

<action android:id="@+id/gotopage2"
        app:destination="@id/page2Fragment"
    />

Action的属性

id: action的id,作为此action的唯一标识了

destination 属性表示你要跳转的fragment,直接打开新的

launchSingleTop: false or true  是否将这个fragment 的启动模式设置为SingleTop   默认为false 

popUpTo   跳转到已存在的指定的fragment  ,如果不存在,不会跳转,也不会报错 

提示:

Ignoring popBackStack to destination sample.xietaichen.testnavigation:id/page2Fragment as it was not found on the current back stack

转场动画:

enterAnim

exitAnim

popEnterAnim

popExitAnim

在点击事件中说那个这个action :

 button2.setOnClickListener {

            Navigation.findNavController(it).navigate(R.id.to_page2)
        }

这样就是使用了之前定义的action 

想要执行类似Activity 的finish 功能可以这样

Navigation.findNavController(it).navigateUp()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值