ARouter的简单使用

ARouter的简单使用

依赖
implementation 'com.alibaba:arouter-api:1.3.1'
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'

android-defaultConfig节点下添加,用到Arouter的都要添加,组件也要添加

				javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
初始化
  1. 在Application中初始化SDK
private void initARouter() {
    if (isDebug()) {           // 这两行必须写在init之前,否则这些配置在init过程中将无效
        ARouter.openLog();     // 打印日志
        ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
    }
    ARouter.init(this); // 尽可能早,推荐在Application中初始化
}

public boolean isDebug() {
    return debug;
}
  1. 混淆设置
-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{*;}
-keep interface * implements com.alibaba.android.arouter.facade.template.IProvider
基本使用
  1. 不带参跳转
  • 跳转页面,使用build设置要跳转的path
ARouter.getInstance().build("/signing/main").navigation();
  • 目标页面,使用@Route注解设置path
@Route(path = "/signing/main")
public class SigningActivity extends AppCompatActivity {
  ....
}
  1. 带参跳转
  • 跳转页面,使用withXXX来设置要传递的参数,此处用法和intent类似
ARouter.getInstance().build(ArouterConstan.SIGNING_MAIN)
        .withString("path", path)
        .navigation();
  • 目标页面

第一种与第二种需要配合 ARouter.getInstance().inject(this);使用,在oncreate中调用

//第一种,指定name,变量名就可以随便定义了
@Autowired(name = "path")
private String path_alias;

//第二种,不指定名称,变量名要与key相同
@Autowired()
private String path;

//第三种
private String in_path = getIntent.getExtras().getString("path");

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signing);
    ARouter.getInstance().inject(this);
  ......
   
}
  1. 带对象跳转
  • 定义解析类
@Route(path = "/signing/json")
public class JsonSerializationService implements SerializationService {
    Gson gson;
    @Override
    public <T> T json2Object(String input, Class<T> clazz) {
        return gson.fromJson(input,clazz);
    }
    @Override
    public String object2Json(Object instance) {
        return gson.toJson(instance);
    }
    @Override
    public <T> T parseObject(String input, Type clazz) {
        return gson.fromJson(input,clazz);
    }
    @Override
    public void init(Context context) {
        gson = new Gson();
    }
}
  • 跳转页面
FileInfo fileInfo = new FileInfo();
ARouter.getInstance().build(ArouterConstan.SIGNING_MAIN)
        .withString("path", path)
        .withObject("obj",fileInfo)
        .navigation();
  • 目标页面
SerializationService serializationService = ARouter.getInstance().navigation(JsonSerializationService.class);
    serializationService.init(this);
    FileData obj = serializationService.parseObject(getIntent().getStringExtra("obj"), User.class);
  1. 通过uri跳转
  • AndroidManifest文件的Activity节点下配置
 <intent-filter>
        <data
        android:host="ideal.com"
        android:scheme="test"/>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
    </intent-filter>
  • 跳转页面
Uri uri = Uri.parse("test://ideal.com/signing/main");
ARouter.getInstance().build(uri).navigation();
  • 目标页面
@Route(path = "/signing/main")
public class SigningActivity extends AppCompatActivity{
  ....
}
  1. 跳转回调
ARouter.getInstance().build(uri).navigation(this, new NavCallback() {
    @Override
    public void onInterrupt(Postcard postcard) {
        super.onInterrupt(postcard);
        //被拦截了
    }

    @Override
    public void onArrival(Postcard postcard) {
        //正常交还控制权
    }
});
  1. 跳转拦截
@Interceptor(priority = 8, name = "test interceptor")
public class TestInterceptor implements IInterceptor {
    @Override
    public void process(Postcard postcard, InterceptorCallback callback) {

      //两者一定要调用一个
        callback.onContinue(postcard);  
        // callback.onInterrupt(new RuntimeException("Something exception"));      
    }

    @Override
    public void init(Context context) {
 
    }
}
  1. startActivityForResult模式
ARouter.getInstance().build("/home/main")
  .navigation(this, 5);//第一个参数必须是Activity,第二个参数是requestCode
  1. 页面跳转动画
ARouter.getInstance()
    .build("/signing/main")
    .withTransition(R.anim.activity_in, R.anim.activity_out)
    .navigation(this);
  1. 跳过所有的拦截器
ARouter.getInstance().build("/signing/main").greenChannel().navigation();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值