使用Kotlin怎么打造一个Router-创新互联

本篇文章给大家分享的是有关使用Kotlin怎么打造一个Router,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

成都创新互联主营西林网站建设的网络公司,主营网站建设方案,手机APP定制开发,西林h5微信平台小程序开发搭建,西林网站营销推广欢迎西林等地区企业咨询
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,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。


新闻名称:使用Kotlin怎么打造一个Router-创新互联
本文链接:http://scyanting.com/article/cohsio.html