ARoute Kotlin路由简单介绍

Aroute作用:

  • Android Module组件化 之间的跳转 ,App Module跟自定义Module之间通过ARount可以进行友好的跳转
  • 包含了Intent的所有功能
  • 跳转带基类也是需要序列化的

Aroute官网:可以自己去查看最新的库,或者是用Java的还是用Kotlin的

战前准备:这里使用Kotlin版

//在app build中添加kapt插件
apply plugin: 'kotlin-kapt'

//Arouter
implementation 'com.alibaba:arouter-api:1.5.0'
kapt 'com.alibaba:arouter-compiler:1.2.2'  //kotlin
//annotationProcessor 'com.alibaba:arouter-compiler:1.2.2' //java

一、创建自定义Application  - 在AndroidManifest.xml 中引入,初始化Aroute

//创建自定义Applicaiton  名字随便
class App : Application() {
    override fun onCreate() {
        super.onCreate()
        if (isDebug()) {           // 这两行必须写在init之前,否则这些配置在init过程中将无效
            ARouter.openLog();     // 打印日志
            ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
        }
        ARouter.init(this); // 尽可能早,推荐在Application中初始化
    }
    fun isDebug(): Boolean {
        return applicationContext.getApplicationInfo() != null && applicationContext.getApplicationInfo().flags and ApplicationInfo.FLAG_DEBUGGABLE !== 0
    }
}

引入

 

二、自定义Aroute配置文件,所有路由的配置,建议吧这个文件放到module中,所有项目module都能引用

注意:

  • 不同module名字必须不同-除非你只有一个App模块
  • Activity的路径必须两级以上:
  •         错误如:/circleDesc
  •         正确如:/ucircle/circleDesc
class ARouterConstants {
    companion object {
        //APP模块--不同module名字必须不同-除非你只有一个App模块
        const val AppGROUP = "/ucircle/"
        //自定义联系人模块--不同module名字必须不同-除非你只有一个App模块
        const val Contanct = "/contact/"
        //主页
        const val HOMEPAGE = AppGROUP + "homepage"
        //详情--路径必须两级以上
        错误如:/circleDesc
        正确如:/ucircle/circleDesc
        const val CIRCLEEDESC = AppGROUP + "circleDesc"
    }
}

三、在Activity中添加路由,这里以主页为例

@Route(path = ARouterConstants.HOMEPAGE)

 

四、跳转

app模块内跳转跟两个模块之间跳转没有区别

1、跳转界面不带参

发起界面

// 1. 普通跳转
ARouter.getInstance().build("/test/activity").navigation();

或者

// 1. 普通跳转-使用自己的配置文件 AouterConstants
ARouter.getInstance().build(ARouterConstants.HOMEPAGE).navigation();

或者Fragment跳转

// 1. 普通跳转-使用自己的配置文件 AouterConstants
ARouter.getInstance().build(ARouterConstants.HOMEPAGE).navigation(this);

目标界面-之后的目标界面都是一样的就不写了

2、带参数的跳转

ARouter.getInstance().build("/test/1")
            .withLong("key1", 666L)
            .withString("key2", "888")
            .withSerializable("key3", new Test("Jack", "Rose"))
            .navigation();

或者

// Fragment 跳转 需要加
ARouter.getInstance().build("/test/1")
            .withLong("key1", 666L)
            .withString("key2", "888")
            .withSerializable("key3", new Test("Jack", "Rose"))
            .navigation(this);

3、带动画的跳转

//没有配置的跳转
ARouter.getInstance().build(“/test/activity”)
                    .withTransition(R.anim.translate_out, R.anim.translate_in)
                    .navigation()

或者

//带左右动画的跳转 使用自己的配置文件 AouterConstants
ARouter.getInstance().build(ARouterConstants.HOMEPAGE)
                    .withTransition(R.anim.translate_out, R.anim.translate_in)
                    .navigation()

或者Fragment跳转

//带左右动画的跳转 使用自己的配置文件 AouterConstants
ARouter.getInstance().build(ARouterConstants.HOMEPAGE)
                    .withTransition(R.anim.translate_out, R.anim.translate_in)
                    .navigation(this)

4、带转场动画的跳转

ARouter.getInstance().build(ARouterConstants.ABOUTCIRCLE)                  .withOptionsCompat(
ActivityOptionsCompat.makeSceneTransitionAnimation(mContext as Activity, view, sharedElementName)”)
.navigation(mContext)

传参的接收端使用:

并且在onCreate中加入:ARouter.getInstance().inject(this);

在app的Build中添加

 //        ARouter
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }

 

注:多个Module之间跳转直接跳转就行了,但是module之间的名字必须不一样

  //APP模块--不同module名字必须不同-除非你只有一个App模块
  const val AppGROUP = "/ucircle/"
  //自定义联系人模块--不同module名字必须不同-除非你只有一个App模块
  const val AppGROUP = "/contact/"

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值