博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RxRouter -- 一个轻量级、简单、智能并且强大的安卓路由库
阅读量:6352 次
发布时间:2019-06-22

本文共 3704 字,大约阅读时间需要 12 分钟。

RxRouter

一个轻量级、简单、智能并且强大的安卓路由库

Getting started

添加依赖

在build.gradle文件中添加以下依赖:

dependencies {	implementation 'zlc.season:rxrouter:x.y.z'	annotationProcessor 'zlc.season:rxrouter-compiler:x.y.z'}复制代码

如果使用 Kotlin ,用 kapt 替换 annotationProcessor

Hello World

首先在我们需要路由的Activity上添加 @Url 注解:

@Url("this is a url")class UrlActivity : AppCompatActivity() {    ...}复制代码

然后创建一个被 @Router 注解的类,用来告诉RxRouter这里有一个路由器:

@Routerclass MainRouter{}复制代码

这个类不需要有任何其余的代码,RxRouter会根据这个类的类名自动生成一个 RouterProvider ,比如这里的 MainRouter 将会生成 MainRouterProvider .

接着我们需要把这些路由器添加到 RxRouterProviders 中:

class CustomApplication : Application() {    override fun onCreate() {        super.onCreate()        RxRouterProviders.add(MainRouterProvider())    }}复制代码

最后,就可以开始我们的表演了:

RxRouter.of(context)        .route("this is a uri")        .subscribe()复制代码

参数传递

携带参数跳转:

通过with方法,你可以给本次路由添加一系列参数.

RxRouter.of(context)        .with(10)                         	//int value        .with(true)							//boolean value        .with(20.12)						//double value        .with("this is a string value")		//string value        .with(Bundle())						//Bundle value        .route("this is a uri")        .subscribe()复制代码

不再需要 onActivityResult 方法了

想要获取跳转返回的值?再也不用写一大堆 onActivityResult 方法了!链式调用,一步到位!

RxRouter.of(context)		.with(false)        .with(2000)        .with(9999999999999999)        .route("this is a uri")        .subscribe {            if (it.resultCode == Activity.RESULT_OK) {                val intent = it.data                val stringResult = intent.getStringExtra("result")                result_text.text = stringResult                stringResult.toast()            }        }复制代码

如果有结果返回,在subscribe中处理就行了.

Class 跳转

不想用Url注解?没问题,RxRouter同样支持原始的指定类名的跳转方式,和url跳转的方式相同:

RxRouter.of(context)        .routeClass(ClassForResultActivity::class.java)        .subscribe{            if (it.resultCode == Activity.RESULT_OK) {                val intent = it.data                val stringResult = intent.getStringExtra("result")                result_text.text = stringResult                stringResult.toast()            }        }复制代码

Action 跳转

同样的,RxRouter也支持系统的Action和自定义的Action跳转.

自定义Action跳转:

复制代码
RxRouter.of(context)        .routeAction("zlc.season.sample.action")        .subscribe({            "no result".toast()        }, {            it.message?.toast()        })复制代码

系统Action跳转:

//拨打电话RxRouter.of(this)        .addUri(Uri.parse("tel:123456"))        .routeSystemAction(Intent.ACTION_DIAL)        .subscribe()//发送短信val bundle = Bundle()bundle.putString("sms_body", "这是信息内容")RxRouter.of(this)        .addUri(Uri.parse("smsto:10086"))        .with(bundle)        .routeSystemAction(Intent.ACTION_SENDTO)        .subscribe()复制代码

防火墙

RxRouter拥有一个小巧而强大的防火墙,能够在路由之前根据防火墙的规则进行拦截,您可以添加一个或者多个防火墙.

//创建一个LoginFirewallclass LoginFirewall : Firewall {
override fun allow(datagram: Datagram): Boolean { if (notLogin) { "您还没有登录,请先登录".toast() return false } return true }}//将Firewall添加到路由中RxRouter.of(this) .addFirewall(LoginFirewall()) .route("this is a url") .subscribe()复制代码

License

Copyright 2018 Season.ZlcLicensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License at   http://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.复制代码

转载地址:http://nxmla.baihongyu.com/

你可能感兴趣的文章
整合了下批量上传可以拖动排序【swfupload】
查看>>
js实时显示系统时间
查看>>
1. 两数之和
查看>>
[转]Hyper-V 虛擬化技術(Hyper-V 2.0)
查看>>
YunTable开发日记(3) – BigTable的数据模型和调用接口 (转载)
查看>>
常用正则用法汇总 (转载)
查看>>
HTML技术简介
查看>>
linux 加./(点斜杠)和. /加(点空格斜杠)有什么分别?
查看>>
spring data jpa根据方法名查询
查看>>
缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题(转载)
查看>>
jquery each函数对应的continue 和 break方法
查看>>
&&和&、||和|的区别
查看>>
Bootstrap3基础 thumbnail 圆角类型的div块
查看>>
Java面向对象练习题多态之字母表
查看>>
ember.js101 入门教程 第三课
查看>>
Shell脚步之监控iostat数据
查看>>
C语言 -- 折半查找小程序
查看>>
python正则-- re模块
查看>>
402. Remove K Digits - Medium
查看>>
arm汇编指令的条件码
查看>>