版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】android中怎么利用ARouter实现组件化
这篇文章给大家介绍android中怎么利用ARouter实现组件化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。工程目录:/admin/fckeditor/editor/工程一共分为4个模块,基础组件app、基础服务(包涵路由服务)basecommonlibrary模块、业务模块libraryone、业务模块librarytwo;在4个模块的gradle文件当中加入如下代码:android
{
...
defaultConfig
{
...
javaCompileOptions
{
annotationProcessorOptions
{
arguments
=
[moduleName:
project.getName()]
}
}
}
}
dependencies
{
...
compile
'com.alibaba:arouter-api:1.2.1'
annotationProcessor
'com.alibaba:arouter-compiler:1.1.2'
}依赖包的具体版本可自行选择。接下来就是具体讲解ARouter如何在这几个模块中充当路由的角色了。首先是app模块中定义的一个页面,布局很简单,就不贴代码了,效果如下;Activity部分代码如下:@Override
public
void
onClick(View
v)
{
switch
(v.getId())
{
case
R.id.bt1:
RouterCommonUtil.startMainTextActivity(this,
"测试文本");
break;
case
R.id.bt2:
RouterCommonUtil.startMainImageActivity(this,
"/timg?image&quality=80&size=b9999_10000&sec=1492584424522&di=5dcde77431914e0b944b8af9ff5f9277&imgtype=jpg&src=http%3A%2F%2F%2Fit%2Fu%3D1489971249%2C1618541505%26fm%3D214%26gp%3D0.jpg");
break;
case
R.id.bt3:
RouterCommonUtil.startLibraryOneActivity(this);
break;
case
R.id.bt4:
RouterCommonUtil.startLibraryTwoActivity(this);
break;
}
}
@Override
protected
void
onActivityResult(int
requestCode,
int
resultCode,
Intent
data)
{
super.onActivityResult(requestCode,
resultCode,
data);
if
(resultCode
==
1002)
{
Toast.makeText(this,
data.getStringExtra("arg2"),
Toast.LENGTH_SHORT).show();
}
}点击事件分别响应到本module(app)中的两个activity以及libraryone和librarytwo中的activity,其中第一个用来测试ForResult方式启动的Acitivty。接下来是libraryone中Activity布局截图:activity部分代码如下:@Override
public
void
onClick(View
v)
{
int
i
=
v.getId();
if
(i
==
R.id.bt1)
{
RouterCommonUtil.startMainActivity(this);
}
else
if
(i
==
R.id.bt2)
{
RouterCommonUtil.startLibraryTwoActivity(this);
}
}也是测试了两个跳转,分别跳转到主Module中的Activity中和libraryTwo的Activity中,libraryTwo中的布局和代码跟libraryone中大同小异,这里就不继续贴出了,本项目会在附件中提供源码,欢迎下载。这里还需要贴出封装在basecommonlibrary模块中的公共跳转类,所有的module,都是通过该模块中的路由公共类来实现跳转的,完整代码如下:import
android.app.Activity;
import
android.text.TextUtils;
import
android.widget.Toast;
import
com.alibaba.android.arouter.facade.Postcard;
import
com.alibaba.android.arouter.launcher.ARouter;
import
com.example.basecommonlibrary.router.IInterceptor.InterruptCallback;
import
rx.Observable;
import
rx.Subscriber;
import
rx.android.schedulers.AndroidSchedulers;
import
rx.functions.Action1;
/**
*
@author:
xiewenliang
*
@Filename:
*
@Description:
*
@date:
2017/4/25
15:06
*/
public
class
RouterCommonUtil
{
private
static
void
toastInterruptInfo(final
Activity
activity,
final
Postcard
postcard)
{
if
(postcard.getTag()
!=
null
&&
postcard.getTag()
instanceof
String)
{
Observable.create(new
Observable.OnSubscribe<String>()
{
@Override
public
void
call(Subscriber<?
super
String>
subscriber)
{
subscriber.onNext((String)
postcard.getTag());
}
}).observeOn(AndroidSchedulers.mainThread()).subscribe(new
Action1<String>()
{
@Override
public
void
call(String
s)
{
if
(!TextUtils.isEmpty(s)
&&
activity
!=
null)
{
Toast.makeText(activity,
(String)
postcard.getTag(),
Toast.LENGTH_SHORT).show();
}
}
});
}
}
public
static
void
startMainActivity(final
Activity
activity)
{
ARouter.getInstance().build("/ui/主页").navigation(activity,
new
InterruptCallback()
{
@Override
public
void
onInterrupt(Postcard
postcard)
{
toastInterruptInfo(activity,
postcard);
}
});
}
public
static
void
startMainTextActivity(final
Activity
activity,
String
value)
{
ARouter.getInstance().build("/ui/text",
"文本").withString("arg1",
value).navigation(activity,
1001,
new
InterruptCallback()
{
@Override
public
void
onInterrupt(Postcard
postcard)
{
toastInterruptInfo(activity,
postcard);
}
});
}
public
static
void
startMainImageActivity(final
Activity
activity,
String
value)
{
ARouter.getInstance().build("/ui/image",
"图片").withString("arg1",
value).navigation(activity,
new
InterruptCallback()
{
@Override
public
void
onInterrupt(Postcard
postcard)
{
toastInterruptInfo(activity,
postcard);
}
});
}
public
static
void
startLibraryOneActivity(final
Activity
activity)
{
ARouter.getInstance().build("/libraryOne/主页").navigation(activity,
new
InterruptCallback()
{
@Override
public
void
onInterrupt(Postcard
postcard)
{
toastInterruptInfo(activity,
postcard);
}
});
}
public
static
void
startLibraryTwoActivity(final
Activity
activity)
{
ARouter.getInstance().build("/libraryTwo/主页").navigation(activity,
new
InterruptCallback()
{
@Override
public
void
onInterrupt(Postcard
postcard)
{
toastInterruptInfo(activity,
postcard);
}
});
}
}该类中主要提供了几个类的跳转方法,以及跳转失败后的信息打印方法,接下来就是测试跳转是否能够正常执行了,请大家自行构建代码或者下载本demo源码查看执行效果。接下来讲解拦截器,以libraryone中的activity为例@Route(path
=
"/libraryOne/主页",
extras
=
CommonStation.CHECK_LOADING)我们在activity上添加如上注解,其中extras的值可以作为判断的类型,具体看拦截器代码import
android.content.Context;
import
com.alibaba.android.arouter.facade.Postcard;
import
com.alibaba.android.arouter.facade.annotation.Interceptor;
import
com.alibaba.android.arouter.facade.callback.InterceptorCallback;
import
com.alibaba.android.arouter.facade.template.IInterceptor;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养殖大棚采购合同模板
- 单位团购协议合同范例
- 医疗期合同范例
- 保姆免责合同范例
- 产品买卖安装合同范例
- 基金招募合同范例
- 劳务报价合同范例
- 员工劳动保密合同模板
- 卖车合同销售合同模板
- 大学晚会合同范例
- 【寒假阅读提升】四年级下册语文试题-非连续性文本阅读(一)-人教部编版(含答案解析)
- 山东省滨州市博兴县2024-2025学年九年级上学期11月期中数学试题
- 外立面改造项目脚手架施工专项方案
- 电力工程施工安全管理规程
- ASTMD638-03中文版塑料拉伸性能测定方法
- 统编版(2024新版)七年级上册道德与法治期中模拟试卷(含答案)
- 【课件】 2024消防月主题培训:全民消防 生命至上
- 砌筑实训课程设计
- 保安人员配置方案
- 食材配送实施方案(适用于学校、医院、酒店、企事业单位食堂等食材采购)投标方案(技术方案)
- 期中练习(试题)-2024-2025学年人教PEP版英语六年级上册
评论
0/150
提交评论