ARouter用于组件和模块之间通信,集成步骤如下
①在build.gradle中做如下配置:
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
compile 'com.alibaba:arouter-api:1.4.1'
annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
②在Application类中初始化:
ARouter.init(CustomApplication.this);
③在目标页面的类名上添加注解:
@Route(path = "/app/TestActivity") //path路径至少是两级的
④在发起跳转的页面发起路由跳转:
ARouter.getInstance().build("/app/TestActivity").navigation();
简单的无参页面跳转就实现了.
⑤发起有参跳转:
在目标页面:
@Autowired(name = "name")
String name;
@Autowired(name = "age")
int age;
在跳转页面:
ARouter.getInstance()
.build(Constant.ACTIVITY_URL_TEST)
.withString("name" , "Alex")
.withInt("age" , 18)
.navigation();
在onCreate中做ARouter注入:
ARouter.getInstance().inject(this);
如果只是做无参页面跳转的话,不需要注入也可以完成,但是如果要传参的话,就必须做ARouter注入了.
目标页面不需要赋值,ARouter会直接完成赋值操作,只要直接调用就可以了.
如果跳转页面的key和目标页面的变量名如果相同注解的参数可以省略,如果不同,不能省略.
如果需要传类的话,需要先把对象序列化
⑥添加跳转动画
在旧版本添加转场动画:
ARouter.getInstance()
.build(Constant.ACTIVITY_URL_TEST)
.withTransition(R.anim.push_in_right , R.anim.push_out_left)
.navigation();
在新版本添加转场动画:
if (Build.VERSION.SDK_INT >= 16) {
ActivityOptionsCompat compat = ActivityOptionsCompat.
makeScaleUpAnimation(v, v.getWidth() / 2, v.getHeight() / 2, 0, 0);
ARouter.getInstance()
.build(Constant.ACTIVITY_URL_TEST)
.withOptionsCompat(compat)
.navigation();
}
新版本转场动画在API<16时不支持,因为新版本的转场动画内部封装了共享元素,不支持低版本API
⑦回调onActivityResult:
ARouter.getInstance()
.build(Constant.ACTIVITY_URL_TEST)
.navigation(MainActivity.this , requestCode);
调用navigation的重载方法就可以了,其他的和正常跳转的实现是一样的.
补充:
①混淆配置
-keep public class com.alibaba.android.arouter.routes.**{*;}
-keep public class com.alibaba.android.arouter.facade.**{*;}
-keep class * implements com.alibaba.android.arouter.facade.template.ISyringe{*;}
②为了更好的管理path路径,建议把所以的path路径常量集中放在一个常量类里
public interface Constant {
String ACTIVITY_URL_TEST = "/app/TestActivity";
String ACTIVITY_URL_MAIN = "/app/MainActivity";
}