是什么
简单的说就是替代startActivity(),可以在项目组件化中实现不同module的界面通讯。
应用场景
- 从外部URL映射到内部页面,以及参数传递与解析
- 跨模块页面跳转,模块间解耦
- 拦截跳转过程,处理登陆、埋点等逻辑
- 跨模块API调用,通过控制反转来做组件解耦
基本配置
添加依赖
apply plugin: 'kotlin-kapt'
//每个使用到路由的组件必须加
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
dependencies {
compile 'com.alibaba:arouter-api:x.x.x'
//每个使用到路由的组件必须加
kapt 'com.alibaba:arouter-compiler:x.x.x'
...
}
初始化
if (isDebug()) { // 这两行必须写在init之前,否则这些配置在init过程中将无效
ARouter.openLog(); // 打印日志
ARouter.openDebug(); // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
}
ARouter.init(mApplication); // 尽可能早,推荐在Application中初始化
关闭路由
ARouter.getInstance().destroy();
基础功能
应用内跳转
//跳转
ARouter.getInstance().build(RoutePath.Main.PAGE_SECOND_ACTIVITY).navigation()
//配置路由
@Route(path = RoutePath.Main.PAGE_SECOND_ACTIVITY)
class SecondActivity:BaseActivity<AcySecondBinding>() {}
携带参数跳转
ARouter.getInstance().build(RoutePath.Main.PAGE_SECOND_ACTIVITY)
.withString(ArouteKey.MAIN.KEY_STRING,"hello aroute")
.withParcelable(ArouteKey.MAIN.KEY_PARCELABLE,User("张三"))
.navigation()
val stringExtra = intent.getStringExtra(ArouteKey.MAIN.KEY_STRING)
val user = intent.getParcelableExtra<User>(ArouteKey.MAIN.KEY_PARCELABLE)
startActivityForResult
ARouter.getInstance()
.build(RoutePath.Main.PAGE_SECOND_ACTIVITY)
.navigation(this,1000)
val intent = Intent().apply {
putExtra(ArouteKey.MAIN.KEY_STRING,"Second Back")
}
setResult(1001,intent)
获取Fragment实例
val fragment = ARouter.getInstance()
.build(RoutePath.ModuleA.PAGE_MODULEA_BLANKFRAGMENT)
.navigation() as Fragment
@Route(path = RoutePath.ModuleA.PAGE_MODULEA_BLANKFRAGMENT)
class BlankFragment:Fragment() {}
配置转场动画
if (Build.VERSION.SDK_INT >= 16) {
ActivityOptionsCompat compat = ActivityOptionsCompat.
makeScaleUpAnimation(v, v.getWidth() / 2, v.getHeight() / 2, 0, 0);
ARouter.getInstance()
.build("/test/activity2")
.withOptionsCompat(compat)
.navigation();
} else {
Toast.makeText(this, "API < 16,不支持新版本动画", Toast.LENGTH_SHORT).show();
}
网友评论