添加依赖

在整个项目的build.gradle中添加:

apply plugin: 'com.alibaba.arouter'buildscript {    dependencies {        classpath "com.alibaba:arouter-register:1.0.2"    }}

在需要跳转和跳转到的moudle的build.gradle中添加依赖:

android {    defaultConfig {        ...        javaCompileOptions {            annotationProcessorOptions {                arguments = [AROUTER_MODULE_NAME: project.getName()]            }        }    }}dependencies {    // 替换成最新版本, 需要注意的是api    // 要与compiler匹配使用,均使用最新版可以保证兼容    compile 'com.alibaba:arouter-api:1.4.0'    annotationProcessor 'com.alibaba:arouter-compiler:1.2.0'}

然后,需要在主项目的moudle的application的onCreate()中初始化ARouter.

public class MyApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        if (isDebug()) {           // 这两行必须写在init之前,否则这些配置在init过程中将无效            ARouter.openLog();     // 打印日志            ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)        }        ARouter.init(this); // 尽可能早,推荐在Application中初始化    }    private boolean isDebug() {        return true;    }}

注意: 假如我需要从app的moudle跳转到其他moudle, 需要把其他moudle依赖到app上边,如: implementation project(‘:library’).

新建moudle的时候需要选第二个android library,才能添加到其他moudle上.

开始使用

简单跳转(不带参数)

比如说,我要从这个页面跳转到其他moudle的页面LibraryTwoActivity中.

1.LibraryTwoActivity添加@Route注解

@Route(path = "/test/libraryTwo")public class LibraryTwoActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_library_two);    }}

2.跳转

ARouter.getInstance().build("/test/libraryTwo").navigation

注意: path至少需要两个层级,如上所示, /test表示分组, 不同moudle中的组名不能相同.例如,有两个moudle中的path都是/test/** , 即第一个的组名相同,编译的时候会报错,所以不同moudle分成不同的组名.

带参数跳转

ARouter.getInstance().build("/test/libraryTwo")            .withLong("key1", 666L)            .withString("key3", "888")            .withObject("key4", new Test("Jack", "Rose"))            .navigation();

在接收时直接当做intent传值就可以了, 如: getIntent().getStringExtra(“key”);

拦截器的使用

路由跳转的时候可以使用拦截器全局拦截.

// 比较经典的应用就是在跳转过程中处理登陆事件,这样就不需要在目标页重复做登陆检查// 拦截器会在跳转之间执行,多个拦截器会按优先级顺序依次执行@Interceptor(priority = 8, name = "测试用拦截器")public class TestInterceptor implements IInterceptor {    /**     * @param postcard     * @param callback     */    @Override    public void process(Postcard postcard, InterceptorCallback callback) {        if (postcard.getExtra() == 1) {            //extra == 1的时候不拦截 , 其他时候拦截            // 处理完成,交还控制权            callback.onContinue(postcard);        }else {            // 觉得有问题,中断路由流程(回调中处理)            callback.onInterrupt(new RuntimeException("我觉得有点异常"));        }    }    @Override    public void init(Context context) {        // 拦截器的初始化,会在sdk初始化的时候调用该方法,仅会调用一次    }}

如上述代码,我们可以在要跳转的activity的注解中设置extra.

@Route(path = "/test/activity", extras = 1)

结合起来理解, 比如说当extras等于1的时候 , 不需要登录就可以进入界面,所以我们在拦截器中, postcard.getExtra()获得extras的值 , 当等于1的时候,就是不需要登录,拦截器不拦截, 最后执行callback.onContinue(postcard);方法 , 如果不等于1 ,拦截器就需要拦截 , 可以自定义提示信息

callback.onInterrupt(new RuntimeException(“我觉得有点异常”));,这时候就需要我们自己去处理.

//@Route注解中,path命名,如"/test/activity",第一个test表示组,不同moudle不能分成一个组                ARouter.getInstance().build("/test/libraryTwo").navigation(MainActivity.this, new NavigationCallback() {                    @Override                    public void onFound(Postcard postcard) {                        //开始先调用次方法,不管能不能跳转                    }                    @Override                    public void onLost(Postcard postcard) {                    }                    @Override                    public void onArrival(Postcard postcard) {                        //跳转成功调用此方法                    }                    @Override                    public void onInterrupt(Postcard postcard) {                        //被拦截器拦截调用此方法  拦截器传递的报错信息在 postcard.tag 里边.                        //直接跳转到登录页                        ARouter.getInstance().build("/app/login").navigation();                    }

如果看不懂,请看demo:
https://download.csdn.net/download/huchengzhiqiang/10608008

更多相关文章

  1. Android(安卓)存储路径
  2. [android]如何使LinearLayout布局从右向左水平排列,而不是从左向
  3. 【Android(安卓)开发教程】保存状态等信息
  4. Android(安卓)4.4以上使用HttpURLConnection底层使用OkHttp实现
  5. Android——Jni使用总结
  6. android夜间模式的实现
  7. OkHttpClientManager使用
  8. Android(java)学习笔记125:Clock app编写报错02
  9. Android培训班(13)

随机推荐

  1. Android(安卓)中播放内存中视频
  2. Android上传文件,客户端+服务器源码
  3. Android(安卓)Studio 3.6.3 中遇到无法创
  4. Android(安卓)ADT 插件安装
  5. android不能显示log的问题
  6. Android软键盘弹出不影响布局的方法
  7. Android代碼執行shell 命令
  8. Android利用tcpdump抓包
  9. 使用 Android(安卓)和 XML 构建动态用户
  10. ADT20新建项目Android(安卓)Support libr