平时在项目中 ,实现Activity的跳转都是使用的startActivity来实现的。今天发现一个路由框架,不但可以很好的实现这个功能,而且还有其他的一些 。
android 原生activity跳转代码:
Intent intent = new Intent(this,OtherActivity.class);
intent.putExtra("key","ARouter");
startActivity(intent);
ARouter 简单用法
- 在gradle 文件中加入依赖
app gradel 文件中添加
apply plugin: 'com.neenbedankt.android-apt'
}
apt {
arguments {
moduleName project.getName();
}
}
dependencies {
apt 'com.alibaba:arouter-compiler:1.0.1'
compile 'com.alibaba:arouter-api:1.0.2'
}
project gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
}
}
allprojects {
repositories {
jcenter()
}
}
- activity页面跳转
新建一个目标Activity , 并在类名上添加Route注解,注意path 名称是有要求的
- 必须是以 / 开头
- 必须包括两个 / ,比如 /main/test ,否则会抛异常
if (StringUtils.isEmpty(path) || !path.startsWith("/")) {
throw new HandlerException(Consts.TAG + "Extract the default group failed, the path must be start with '/' and contain more than 2 '/'!");
}
@Route(path = "/main/test")
public class OtherActivity extends AppCompatActivity {
String key;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
TextView textView = (TextView) findViewById(R.id.text);
key = getIntent().getStringExtra("key");
if (!TextUtils.isEmpty(key)){
textView.setText(key);
}else{
textView.setText("无参数");
}
}
}
启动activity 的代码如下:
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn1:// 不带参数启动
ARouter.getInstance()
.build("/main/test")
.navigation();
break;
case R.id.btn2:// 传递参数启动
ARouter.getInstance()
.build("/main/test")
.withString("key","ARoute")
.navigation();
break;
进阶用法
ARouter.openLog();//开启日志
ARouter.openDebug();//启动debug 模式, 这样一些log日志可以显示出来
其他进阶用法,如根据scheme启动 、 拦截器等 可以参考github 项目文档 。
学习中遇到的问题
- 按照文档配置好后,点击按钮,没有实现页面跳转 ,这个问题现在也没有搞明白,在github上提出issue后,作者那边运行我的demo代码很正常,后来我把代码打包成apk文件,安装运行,跳转功能就正常了,真是见鬼了 。
日志信息:
01-11 23:21:21.053 5815-5815/demo.com.svddemo I/ARouter::: ARouter openLog[ ]
01-11 23:21:21.053 5815-5815/demo.com.svddemo I/ARouter::: ARouter openDebug[ ]
01-11 23:21:21.053 5815-5815/demo.com.svddemo I/ARouter::: ARouter init start.[ ]
01-11 23:21:21.062 5815-5815/demo.com.svddemo D/ARouter::: LogisticsCenter has already been loaded, GroupIndex[0], InterceptorIndex[0], ProviderIndex[0][ ]
01-11 23:21:21.062 5815-5815/demo.com.svddemo I/ARouter::: ARouter init success![ ]
01-11 23:21:21.062 5815-5815/demo.com.svddemo I/ARouter::: Thread production, name is [ARouter task pool No.1, thread No.1][ ]
01-11 23:21:21.062 5815-5815/demo.com.svddemo I/ARouter::: ARouter init over.[ ]
里面 GroupIndex 索引为0,没有发现任何路由映射,应该是没有生成映射文件 。