热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javaroute接口_Android路由框架AnnoRouter:使用Java接口来定义路由跳转

介绍AnnoRouter是一个用于协助Android组件化的路由框架。它参考了Retrofit的接口设计,将路由跳转API转化为Java接口,使用注解来

介绍

AnnoRouter是一个用于协助Android组件化的路由框架。它参考了Retrofit的接口设计,将路由跳转API转化为Java接口,使用注解来配置跳转信息。

b6552dfab8327884ec54de2ff27a99c5.png

Usage

初始化全局Router

Router.Builder builder = new Router.Builder()

.application(this)

...

Router.init(builder);

拦截过滤url

new Router.Builder()

.routerUrlFilter(new IRouterUrlFilter() {

@Override

public String filter(String url) {

...

return url;

}

})

...

异常错误处理

new Router.Builder()

.exceptionHandler(new IExceptionHandler() {

@Override

public void handler(String url, Exception e) {

}

})

...

定义路由Api

使用 @RouterScheme, @RouterHost, @Path 及 @Param 来定义一个路由地址。

@RouterScheme("scheme")

@RouterHost("host")

public interface RouterApi {

@Path("path")

...

void jump(@Param("paramName") int paramValue);

}

public interface RouterApi {

@RouterScheme("scheme")

@RouterHost("host")

@Path("path")

...

void jump(@Param("paramName") int paramValue);

}

有时候,存在 scheme://host/path相同但参数不一样的路由地址,就需要使用注解 @Strict 来作区别。

e.g.

@RouterScheme("scheme")

@RouterHost("host")

public interface RouterApi {

@Path("path")

...

void jumpToActivity1(@Param("param1") String param1);

@Strict

@Path("path")

...

void jumpToActivity2(@Param("param1") String param1, @Param("param2") int param2);

}

scheme://host/path?param1=a 将会匹配上方法 jumpToActivity1

scheme://host/path?param1=a¶m2=1 将会匹配上方法 jumpToActivity2

scheme://host/path?param1=a¶m2=1¶m3=1 将会匹配上方法 jumpToActivity1, 但 param2=1¶m3=1 会被忽略掉。

处理前置校验或准备任务

public interface RouterApi {

@Task(CustomRouterTask.class)

...

void jumpToActivity();

}

// ----------------

public class CustomRouterTask implements IRouterTask {

@Override

public void execute(Context context, RouterInfo routerInfo, OnTaskResult onTaskResult) {

// do something...

onTaskResult.success();

}

}

跳转到Activity或自定义处理

public interface RouterApi {

...

@Activity(LoginActivity.class)

void jumpToLogin();

...

@RouterHandler(CustomRouterHandler.class)

void jumpToLogin();

}

// ----------------

public class CustomRouterHandler implements IRouterHandler {

@Override

public void applyRouter(Context context, RouterInfo routerInfo, OnRouterResult routerResult) {

// do what you want to do.

if(routerResult != null) {

routerResult.onSuccess();

}

}

}

自定义Activity转场动画

public interface RouterApi {

...

@Transition(CustomeTransition.class)

void jumpToLogin();

}

// ----------------

public class CustomeTransition implements IActivityTransition {

@Override

public int enterAnim() {

return R.anim.fade_in;

}

@Override

public int exitAnim() {

return R.anim.fade_out;

}

}

设置Activity launchMode

public interface RouterApi {

...

@Flags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

void jump(@Flags int flags);

...

void jump(@Flags int flags);

}

// ----------------

Router.create(RouterApi.class).jump(Intent.FLAG_ACTIVITY_CLEAR_TOP);

添加路由Api

需要将定义好的路由Api添加至Router。如果只通过接口而不通过url跳转,可以不添加。

Router.addRouterIndex(RouterApi.class);

自定义协议处理

主要处理一些特殊url协议,比如 http, https

public class HttpSchemeHandler implements ISchemeHandler {

@Override

public void applyRouter(Context context, String url, OnRouterResult routerResult) {

Intent intent = new Intent();

intent.setAction("android.intent.action.VIEW");

Uri content_url = Uri.parse(url);

intent.setData(content_url);

context.startActivity(intent);

if(routerResult != null) {

routerResult.onSuccess();

}

}

}

// ----------------

HttpSchemeHandler httpSchemeHandler = new HttpSchemeHandler();

Router.addSchemeHandler("https", httpSchemeHandler);

Router.addSchemeHandler("http", httpSchemeHandler);

使用路由Api进行跳转

两种跳转调用方式:接口跳转,url跳转。

// The Router class generates an implementation of the RouterApi interface.

RouterApi routerApi = Router.create(RouterApi .class);

routerApi.jump("value");

// or use url instead.

Router.execute("scheme://host/path?param=value");

获取Activity Result

@RouterScheme("app")

@RouterHost("usercenter")

public interface LoginRouterApi {

@Path("login")

@Activity(LoginActivity.class)

@RequestCode(1001)

void jumpToLogin(@Param("mobile") String mobile);

@Activity(LoginActivity.class)

@RequestCode(1001)

void jumpToLogin(@Param("mobile") String mobile, OnActivityResult onActivityResult);

}

// ----------------

OnActivityResult onActivityResult = new OnActivityResult() {

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

}

@Override

public void onSuccess() {

}

@Override

public void onFailure(Exception e) {

}

};

Router.execute("app://usercenter/login?mobile=0123456789", onActivityResult);

// or

Router.create(LoginRouterApi.class).jumpToLogin("0123456789", onActivityResult);

Get it

AnnoAdapter is now available on JCentral.

implementation 'com.eastwood.common:anno-router:1.0.2'

结语



推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 前段时间做一个项目,需求是对每个视频添加预览图,这个问题最终选择方案是:用canvas.toDataYRL();来做转换获取视频的一个截图,添加到页面中,达到自动添加预览图的目的。 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
author-avatar
活跃的爱味儿县_454
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有