Android(安卓)路由跳转框架ARouter
16lz
2021-01-26
平时在项目中 ,实现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,没有发现任何路由映射,应该是没有生成映射文件 。
参考文档
github 项目地址
更多相关文章
- Android自学之路,主界面的搭建Drawerlayout的使用
- Android中ViewPager and HorizontalScrollVIew 冲突
- 【Android(安卓)Studio】AS 使用记录06「常用快捷键」
- Android(安卓)Studio第一次启动失败的解决办法
- react-native之module的使用
- Android中visibility属性
- Android(安卓)ART 的初始化和启动
- Android(安卓)装载器---启动装载器
- Android(安卓)通过initrc控制命令、服务启动时间