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

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud