alibaba/ARouter的简单使用

2024-01-27 21:08
文章标签 简单 使用 alibaba arouter

本文主要是介绍alibaba/ARouter的简单使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、配置:
(1)在各个module的build.gradle文件中添加依赖:

    //Arouterapi 'com.alibaba:arouter-api:1.3.1'annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'

(2)在各个module的build.gradle文件的defaultConfig{ }中添加如下代码:

    //ArouterjavaCompileOptions {annotationProcessorOptions {arguments = [ moduleName : project.getName() ]}}

二、使用:

1.在Application里初始化:

    @Overridepublic void onCreate() {super.onCreate();if (BuildConfig.isDebug) {ARouter.openLog();ARouter.openDebug();}ARouter.init(this); }

2.页面跳转和传值:

(1)为要跳转的目标Activity添加注解:

@Route(path = "/cloud/CloudHomeActivity")
public class CloudHomeActivity extends AppCompatActivity {

(2)跳转到目标Activity并传值:

ARouter.getInstance().build("/cloud/CloudHomeActivity").withString("name", "libai").withInt("age", 23).withParcelable("person",new Person("dufu",12)).navigation();

(3)CloudHomeActivity接收传递的参数:

@Route(path = "/cloud/CloudHomeActivity")
public class CloudHomeActivity extends AppCompatActivity {@Autowiredpublic String name;@Autowiredpublic int age;@Autowiredpublic Person person;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_choud_home);ARouter.getInstance().inject(this);TextView textView1 = findViewById(R.id.textview1);TextView textView2 = findViewById(R.id.textview2);textView1.setText(name + "-" + age);textView2.setText(person.name + "-" + person.age);}}

注意,这里使用ARouter协助解析参数类型时,name、age、person必须声明为public的,且名字与传参时的名字要一致,否则会报错。

也可以使用原始的方式获取参数:

name = getIntent().getStringExtra("name");
age = getIntent().getIntExtra("age",0);
person = getIntent().getParcelableExtra("person");

3.NavigationCallback监听路由结果

public class MyNavigationCallBack implements NavigationCallback {private static final String TAG = "MyNavigationCallBack";@Override//路由目标被发现时调用public void onFound(Postcard postcard) {Log.d(TAG, "onFound: 找到目标:" + postcard.getPath());}@Override//路由被丢失时调用public void onLost(Postcard postcard) {Log.d(TAG, "onLost: 没找到目标:" + postcard.getPath());}@Override//路由到达之后调用public void onArrival(Postcard postcard) {Log.d(TAG, "onArrival: 到达目标:"+ postcard.getPath());}@Override//路由被拦截时调用public void onInterrupt(Postcard postcard) {Log.d(TAG, postcard.getPath() + " 被拦截了");}
}

在页面跳转的时候加上路由监听(mNavigationCallBack为MyNavigationCallBack的实例对象):

ARouter.getInstance().build(RouterPath.PAY_HOME_ACTIVIY).navigation(mContext,mNavigationCallBack);

4.拦截器IInterceptor

使用ARouter.getInstance().build(path).navigation(),不管是跳往哪个Activity,只要没设置绿色通道greenChannel(),都会被拦截器拦截,下面是一个拦截没登录状态、目标页的extras=-100的拦截器:

// onContinue()和onInterrupt()至少需要调用其中一种,否则不会继续路由
@Interceptor(priority = 8) //优先级越大,越先执行
public class CheckLoginIntercepter implements IInterceptor {private static final String TAG = "CheckLoginIntercepter";@Override//第一个参数postcard,里面包含了要跳转的目标activity的路径和要传递的参数public void process(Postcard postcard, InterceptorCallback callback) {if (AppApplication.getInstance().isLogined()){ //登陆了就放行if (postcard.getExtra() == -100){ //目标页面上@Router里声明extras = -100的页面被拦截callback.onInterrupt(null);ARouter.getInstance().build(RouterPath.SETTING_ACTIVIY).greenChannel().navigation();}else{callback.onContinue(postcard);//放行}}else{ //未登陆就拦截callback.onInterrupt(null);ARouter.getInstance().build(RouterPath.LOGIN_ACTIVIY).greenChannel() //绿色通道,使不经过任何的拦截器.navigation();}}@Override //只在ARouter初始化的时候执行一次public void init(Context context) {Log.d(TAG, "init: CheckLoginIntercepter初始化了");}}

其中,extras 是在目标页的Router声明的,如:

@Route(path = RouterPath.PAY_HOME_ACTIVIY,extras = -100)
public class PayHomeActivity extends BaseActivity {

如果为登陆状态,要跳往PayHomeActivity,又没设置绿色通道的话,就会被拦截器拦截,从而跳到路径为RouterPath.SETTING_ACTIVIY的页面。

5.转场动画

ARouter.getInstance().build(RouterPath.SETTING_ACTIVIY).withTransition(R.anim.slide_in_right, R.anim.slide_out_left).navigation();

这篇关于alibaba/ARouter的简单使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/651499

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]