添加依赖和配置
android {
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = [ moduleName : project.getName() ]
}
}
}
}
dependencies {
// 替换成最新版本, 需要注意的是api
// 要与compiler匹配使用,均使用最新版可以保证兼容
compile 'com.alibaba:arouter-api:x.x.x'
annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
...
}
// 旧版本gradle插件(< 2.2),可以使用apt插件,配置方法见文末'其他#4'
// Kotlin配置参考文末'其他#5'
添加注解
// 在支持路由的页面上添加注解(必选)
// 这里的路径需要注意的是至少需要有两级,/xx/xx
@Route(path = "/test/activity")
public class YourActivity extend Activity {
...
}
1.发起路由操作
应用内简单的跳转(通过URL跳转在’进阶用法’中)
ARouter.getInstance().build("/test/activity").navigation();
2.跳转并携带参数
ARouter.getInstance().build("/test/1")
.withString("name", "888")
.withInt("age", 11)
.navigation();
3.接受参数
在Activity中获取参数有两种方式,一种是普通Activity那样getIntent().getXXX
加一种是使用@Autowired注解的方式
@Autowired
public String name;
@Autowired(name = "age")
int age;
ARouter.getInstance().inject(this);//添加在onCreate()
// ARouter会自动对字段进行赋值,无需主动获取
Log.d("param", name + age + age);
跳转传递对象
public class TestObj implements Serializable {
public String name;
public int id;
public TestObj() {
}
public TestObj(String name, int id) {
this.name = name;
this.id = id;
}
}
入参数
// 2. 跳转并携带参数
List<TestObj> list = new ArrayList<>();
for (int i = 0; i < 5; i++) {
TestObj testObj = new TestObj("Rose" + i, 777);
list.add(testObj);
}
ARouter.getInstance().build(ARouterManager.BModuleActivity)
.withString("name", "老王")
.withInt("age", 18)
.withString("url", "https://a.b.c")
.withSerializable("pac", (Serializable) list)
.navigation();
}
#接受参数
List<TestObj> chooseList = (List<TestObj>) getIntent().getSerializableExtra("pac");//获取list方式
txt.setText("name:" + chooseList.size());
上面是按照原生的getXXX获取跳转参数
另一种得到参数方式
和上述方式一样添加
@Autowired
TestObj obj;
ARouter.getInstance().inject(this);
在需要得到参数的Module里面定义,可完全copy过去,表示才用什么方式去转换参数,本文采用的GSON,写完后再跳转便可得到参数,而且JsonServiceImpl 会打印参数,
// 如果需要传递自定义对象,需要实现 SerializationService,并使用@Route注解标注(方便用户自行选择序列化方式),例如:
@Route(path = "/service/json")
public class JsonServiceImpl implements SerializationService {
@Override
public void init(Context context) {
}
@Override
public <T> T json2Object(String text, Class<T> clazz) {
Log.w("TAG", "text---" + text);
return new Gson().fromJson(text, clazz);
}
@Override
public String object2Json(Object instance) {
Log.w("TAG", "Object---" + instance);
return new Gson().toJson(instance);
}
}
ARouter不止可以跳转Activity还能跳转fragment
Fragment mFragment = (Fragment) ARouter.getInstance().build("/home/HomeFragment").navigation();
getSupportFragmentManager().beginTransaction().replace(R.id.fl, mFragment).commit();