是什么
簡單的說就是替代startActivity(),可以在項(xiàng)目組件化中實(shí)現(xiàn)不同module的界面通訊丢间。
應(yīng)用場景
- 從外部URL映射到內(nèi)部頁面颈将,以及參數(shù)傳遞與解析
- 跨模塊頁面跳轉(zhuǎn),模塊間解耦
- 攔截跳轉(zhuǎn)過程饥脑,處理登陸恳邀、埋點(diǎn)等邏輯
- 跨模塊API調(diào)用,通過控制反轉(zhuǎn)來做組件解耦
基本配置
添加依賴
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(); // 開啟調(diào)試模式(如果在InstantRun模式下運(yùn)行谣沸,必須開啟調(diào)試模式!線上版本需要關(guān)閉,否則有安全風(fēng)險(xiǎn))
}
ARouter.init(mApplication); // 盡可能早笋颤,推薦在Application中初始化
關(guān)閉路由
ARouter.getInstance().destroy();
基礎(chǔ)功能
應(yīng)用內(nèi)跳轉(zhuǎn)
//跳轉(zhuǎn)
ARouter.getInstance().build(RoutePath.Main.PAGE_SECOND_ACTIVITY).navigation()
//配置路由
@Route(path = RoutePath.Main.PAGE_SECOND_ACTIVITY)
class SecondActivity:BaseActivity<AcySecondBinding>() {}
攜帶參數(shù)跳轉(zhuǎn)
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實(shí)例
val fragment = ARouter.getInstance()
.build(RoutePath.ModuleA.PAGE_MODULEA_BLANKFRAGMENT)
.navigation() as Fragment
@Route(path = RoutePath.ModuleA.PAGE_MODULEA_BLANKFRAGMENT)
class BlankFragment:Fragment() {}
配置轉(zhuǎn)場動畫
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();
}