Arouter 是一個用于幫助 Android App 進(jìn)行組件化改造的框架 —— 支持模塊間的路由、通信前方、解耦,[Arouter Github地址](https://github.com/alibaba/ARouter),是項目進(jìn)行組件化開發(fā)的神器,今天來講一下ARouter怎么在Kotlin項目中進(jìn)行使用
###第一步廉油,項目需要集成Kotlin插件
? ? apply plugin: 'kotlin-android'
? ? apply plugin: 'kotlin-android-extensions'
? ? apply plugin: 'kotlin-kapt'
前面兩個插件做過Kotlin的小伙伴應(yīng)該都很熟悉惠险,后面這個插件是干什么用的呢?
KAPT是Annotation Processing for Kotlin 的縮寫形式娱两,Kotlin的注解處理莺匠,詳細(xì)的可以看這篇文章[KAPT(Annotation Processing for Kotlin)是什么](http://www.reibang.com/p/8c3437006e79) 就如Java Android項目的 annotationProcessor
**第二步,添加依賴**
? ? dependencies {
? ? ? ? ? implementation 'com.alibaba:arouter-api:1.5.0'
? ? ? kapt 'com.alibaba:arouter-compiler:1.2.2'
? ? }
? ? ? ? defaultConfig {
? ? ? ? ? ? kapt {
? ? ? ? ? ? ? ? arguments {
? ? ? ? ? ? ? ? ? ? arg("AROUTER_MODULE_NAME", project.getName())
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
**使用方法**
Activity的使用方法
定義Activity
? ? @Route(path = "/haifengdemo/login")
? ? class LoginActivity : AppCompatActivity() {
? ? ? ? override fun onCreate(savedInstanceState: Bundle?) {
? ? ? ? ? ? super.onCreate(savedInstanceState)
? ? ? ? ? ? setContentView(R.layout.activity_login)
? ? ? ? }
? ? }
Activity跳轉(zhuǎn)
? ? ? ARouter.getInstance().build("/haifengdemo/login").navigation()
Fragment的使用方法
定義Fragment
? ? @Route(path = "/haifengdemo/test_fragment")
? ? class TestFragment :Fragment(){
? ? ? ? override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
? ? ? ? ? ? super.onCreateView(inflater, container, savedInstanceState)
? ? ? ? ? ? val? test: Int? = arguments?.getInt("xxxx")
? ? ? ? ? ? val? test2:String? = arguments?.getString("xxx")
? ? ? ? ? ? return? layoutInflater.inflate(R.layout.fragment_test,null)
? ? ? ? }
? ? }
Fragment跳轉(zhuǎn)
? ? ? val? fragment:Fragment= ARouter.getInstance().build("/haifengdemo/test_fragment") .navigation() as Fragment
? ? ? ? ? ? ? ? val? bundle =Bundle()
? ? ? ? ? ? ? ? bundle.putInt("test",123)
? ? ? ? ? ? ? ? fragment.arguments=bundle
? ? ? ? ? ? ? ? supportFragmentManager.beginTransaction().replace(R.id.content,fragment).commitAllowingStateLoss()
集成過程中可能會遇到的問題
問題1十兢,找不kapt
解決方法:原因是由于沒有引入kapt插件趣竣,添加插件 kotlin-kapt就可以了
? ? apply plugin: 'kotlin-kapt'
問題2,No module name
解決方法旱物,添加參數(shù)
? ? defaultConfig {
? ? ? ? ? ? kapt {
? ? ? ? ? ? ? ? arguments {
? ? ? ? ? ? ? ? ? ? arg("AROUTER_MODULE_NAME", project.getName())
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }