本篇文章给大家分享的是有关使用Kotlin怎么打造一个Router,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
public void putRouteClass(ArrayMap<String, Class<?>> routableMap) {
routableMap.put("test", MainActivity.class);
}
根据讲每个module里添加注解的Activity和fragment的class对象放入传入的map里。之后再Application的onCreate方法里,调用Router的register方法
fun register(vararg moduleNames: String)
{
for (moduleName in moduleNames)
{
try
{
val cla = Class.forName(Constants.PACKAGE_NAME + Constants.DOT + moduleName + "_" + Constants.ROUTER_TABLE_IMP)
val routerTable = cla.newInstance() as RouterTable
routerTable.putRouteClass(classMap)
} catch (e: ClassNotFoundException)
{
e.printStackTrace()
} catch (e: Exception)
{
e.printStackTrace()
}
}
}
这个方法很简单,调用每个module里利用Processor生成的对象的putRouteClass方法,将Router里的一个全局map传入,这样,这个map就持有了所有添加注解的Activity和fragment的url以及对应的class对象。有了class对象,那想怎么搞就怎么搞了
//类似startActivity
fun go(context: Context, url: String, extras: Bundle? = null)
{
val intent = Intent(context, classMap[url])
if (extras != null)
{
intent.putExtras(extras)
}
context.startActivity(intent)
}
fun go(fragment: Fragment,url: String, extras: Bundle? = null)
{
val context=fragment.context
if(context!=null)
{
go(context, url, extras)
}
}
//类似startActivityForResult
fun goForResult(context: Context, url: String, requestCode: Int, extras: Bundle? = null)
{
val intent = Intent(context, classMap[url])
if (extras != null)
{
intent.putExtras(extras)
}
if (context is Activity)
{
context.startActivityForResult(intent, requestCode)
} else if (context is Fragment)
{
context.startActivityForResult(intent, requestCode)
}
}
//得到fragment
fun getFragment(url: String): Fragment?
{
try
{
val cla = classMap[url]
if (cla != null)
{
return cla.newInstance() as Fragment
} else
{
}
} catch (e: ClassNotFoundException)
{
e.printStackTrace()
} catch (e: Exception)
{
e.printStackTrace()
}
return null
}
3.有些坑:
3.1
注册注解解释器的时候,不要使用google的autoservice库了,采用resoureces,META-INF,不然没效果。别问为什么,我也不知道
3.2
在gradle文件里使用注解解释器使用kapt代替annoationProcessor
apply plugin: 'kotlin-kapt'
dependencies {
kapt project(':processor')
api project(':router')
}
以上就是使用Kotlin怎么打造一个Router,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。