引言:
提到android开发中的页面跳转和数据传递,你会想到什么?Intent?还是Bundle?你还在为到底传递的数据接收方是activity还是fragment而纠结使用何种跳转方式吗?其实大可不必!一个ARouter路由跳转将它们一视同仁、统统搞定,你只需要一种方式就可以快乐开发页面跳转,告别传统老套的Intent。
介绍
一句话:帮助 Android App 进行组件化改造的路由框架。
那么,什么是路由框架呢?其实就是根据路径跳转的框架。通俗来讲,就是给每一个Activity或者Fragment自定义一个路径,当每次点击事件触发时,让路由根据这个路径去跳转,同时传递你想要传的数据过去。
用法
第一步:添加依赖和配置(app下的build gradle)。
//ARouter路由跳转
implementation 'com.alibaba:arouter-api:1.3.1'
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
// kapt 'com.alibaba:arouter-compiler:1.1.4' //Kotlin语言,需要改关键字
defaultConfig {
//ARouter路由跳转
javaCompileOptions {
annotationProcessorOptions {
arguments = [moduleName :project.getName() ]
}
}
}
第二步:新建一个ARouterManager类。
作用:统一管理各个界面路由跳转的路径值。
/**
* @data on 2020/9/9 12:18 PM
* @auther ArmStrong
* @describe 路由跳转框架管理
*/
public class ARouterManager {
public static class Path {
public static final String ARouter_B = "/ArmStrong/hello_ARouter";
}
/**
* 初始化路由框架
* @param application
*/
public static void initRouter(Application application) {
if (BuildConfig.DEBUG) {
// 开启调试模式,此为必须项,否则ARouter将无法进行跳转
ARouter.openDebug();
// 打印日志
ARouter.openLog();
}
ARouter.init(application);
}
}
第三步:在ActivityA(传递数据方),进行页面跳转和传入参数。
public class Case17 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_case17);
//路由初始化调用,传入参数为Application
ARouterManager.initRouter(getApplication());
//跳转界面+传递数据
// ARouter.getInstance().build(ARouterManager.Path.ARouter_B).navigation(); //不带数据
ARouter.getInstance()
.build(ARouterManager.Path.ARouter_B)
.withString("zhangsan","我是张三")
.withString("lisi","我是李四")
.navigation();
}
}
第四步:在ActivityB(接收数据方),跳转完成,接收参数。
@Route(path = "/ArmStrong/hello_ARouter")
public class Case18 extends AppCompatActivity {
@Autowired(name = "zhangsan") //获取ARouter传过来值需要使用的注解
String key1;
@Autowired(name = "lisi") //获取ARouter传过来值需要使用的注解
String key2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_case18);
ARouter.getInstance().inject(this); //接收数据
Toast.makeText(this,key1+key2,Toast.LENGTH_SHORT).show(); //Toast展示
}
}
大功告成!!!
运行效果
ARouter界面跳转.gif
【解析】
(1):原理
使用ARouter框架就是通过路径找到你需要跳转到的Activity,或者Fragment,然后进行跳转和传参,不再受限于你的数据传递方和接收方是Activity又或者Fragment,它并不关心。
对比老套的Intent,Bundle来进行Activity之间传值,Activity与Fragment之间传值,Fragment之间传值,当你使用过ARouter路由框架来管理你的页面跳转后,你会发现ARouter将它们一视同仁,页面跳转将如同德芙般尽享丝滑。
(2):路径
路径(自定义):就像我例子中写的"/ArmStrong/hello_ARoute",来通过自定义的ARouterManager框架管理类,找到你想要跳转到的界面,然后去给他定义路径,再在ActivityA(数据传出方)去使用下面的方式调用进行界面跳转,大功告成!其中url不就是你自定义的ActivityB的路径吗?这并不难理解。
ARouter.getInstance().build(url).navigation()
(3):键值对
发送方通过这种("key","value")的键值对方式传参数,想必大家并不陌生。
.withString("zhangsan","我是张三")
接收方通过下面这种注解的方式来接收参数,@Autowired(name = "key"),接收到你传递的key值,并且定义一个String 类型的key1来接收它,其实就是做了一个 String key1 = key 的操作,你就可以使用传递过来的数据了。
@Autowired(name = "zhangsan")
String key1;
千夜零一:“这是我的第一篇博客。今年毕业以来已经两个月了好快,之前总是看各种博客学习东西,现在我想用博客记录下我的学习脚步,好东西也需要分享,索取和给予是相互的。以后会尽量日更的!目标完成1001篇博客哈哈。”
如果觉得对你有所帮助,请不要吝啬你的点赞,有问题也可以在下方评论区留言哦,关注我一起学习吧~