Aroute使用

组件化框架编写中遇到一个问题,为了降低模块与模块之间的耦合 不得不通过路由进行引用,比如activity 的跳转,因为模块之间互不引用这样一个原则,用过显示开启activity就不现实,隐式调用要知晓action哦等,当然我们也可以通过中间组件进行跳转交互,但是路由无疑提供了一种最简洁的实现
Aroute是使用
在要跳转的module的gradle文件中添加以下依赖

  kapt 'com.alibaba:arouter-compiler:1.1.4'
  implementation 'com.alibaba:arouter-api:1.3.1'

如果工程用的kotlin,对arouter-compiler包的依赖要用kapt
如果不用kotlin:把kapt 换成annotationProcessor即可
annotationProcessor’com.alibaba:arouter-compiler:1.1.4’
注意两个一拉版本号的对应

apply plugin: 'kotlin-kapt'

然后在 defaultConfig中添加如下配置

   defaultConfig {
        javaCompileOptions {

            annotationProcessorOptions {

                arguments = [moduleName: project.getName()]

            }
        }

    }

初始化:

ARouter.openLog();
ARouter.openDebug();
ARouter.init(mApplication_);

在目标activity做如下配置

public static final String ACTIVITY_LOGIN = “/Login/login”;

@Route(path = ABSLoginPluginService.ACTIVITY_LOGIN)
class LoginActivity : BaseActivity(), View.OnClickListener {}

path接受一个String类型,该字符串并且最少包含两个“/”
跳转代码

ARouter.getInstance().build(ABSLoginPluginService.ACTIVITY_LOGIN).with(bundle).navigation();

数据传递:Aroute跳转时候可以携带参数,
众所周知用第三方框架肯定要封装一层自己的代码

package com.dayizhihui.dyzhlib.util.SkipManager;

import android.os.Bundle;
import android.text.TextUtils;

import com.alibaba.android.arouter.launcher.ARouter;

public class SkipManager {
  private SkipManager() {

  }
  public static SkipManager getInstanc() {
    return SkipManagerFactory.skipManager;
  }

  private static class SkipManagerFactory {
    private static SkipManager skipManager = new SkipManager();
  }
  public   SkipManager.Builder build() {
    return new SkipManager.Builder();
  }

  public class Builder {
    private Bundle bundle;
    private String  targetClass;

    public Builder bundle(Bundle bundle) {
      this.bundle = bundle;
      return this;
    }

    public Builder targetClass(String  targetClass) {
      this.targetClass = targetClass;
      return this;
    }

    public void skip() throws SkipManager.NoTargetClassException {
      if (TextUtils.isEmpty(targetClass)) {
        throw new NoTargetClassException();
      }

      if (bundle == null) {
        ARouter.getInstance().build(targetClass).navigation();

      } else {
        ARouter.getInstance().build(targetClass).with(bundle).navigation();

      }

    }

  }
  private static class NoTargetClassException extends RuntimeException {
  }


}

使用:SkipManager.getInstanc().build().targetClass(ACTIVITY_LOGIN).bundle(bundle).skip();
可以塞进去不同对象类型的数据集,向bundle这种数据载体是在开发中很有用的,特别是在封装中,当然我们也可以通过泛型来实现这样的数据结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值