本篇文章给大家分享的是有关使用Kotlin怎么打造一个Router,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
在来凤等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计、成都网站建设 网站设计制作按需求定制制作,公司网站建设,企业网站建设,品牌网站建设,成都营销网站建设,外贸网站制作,来凤网站建设费用合理。
public void putRouteClass(ArrayMap> 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,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。