1.这里区分Java和Kotlin,两种方式引用方式略有不同
在app的build.gradle的defaultConfig中配置
android{
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
// Java ARouter配置
// javaCompileOptions {annotationProcessorOptions {arguments = [AROUTER_MODULE_NAME: project.getName()]}}
// Kotlin ARouter配置
kapt {arguments {arg("AROUTER_MODULE_NAME", project.getName())}}
}
}
引入依赖:
// Java ARouter依赖
// compile 'com.alibaba:arouter-api:1.5.2'
// annotationProcessor 'com.alibaba:arouter-compiler:1.5.2'
// Kotlin ARouter依赖
implementation "com.alibaba:arouter-api:1.5.2"
kapt "com.alibaba:arouter-compiler:1.5.2"
另外:如果是Kotlin项目 需要添加plug:
plugins {
id 'com.android.application'
id 'kotlin-android'
//如果是Kotlin项目 添加以下Pluging
id 'kotlin-kapt'
id 'kotlin-android-extensions'
}
这里我放一下我的目录结构
主要是从MainActivity跳转到不同的Activity
下面是代码部分:
1.统一的路径类
package com.example.myapplication.aaa
object RouterPathCons {
//路径可以随便配置 但是必须以/开头 一般最好两级/ / 跳转时候build()括号中的路径和目标Activity的@Route(path="路径")必须一致
const val RouterActivity1: String = "/aaa/a1";
const val RouterActivity2: String = "/bbb/RouterActivity2";
const val RouterActivity3: String = "/ccc/ccc1";
const val RouterActivity4: String = "/ddd/ddd2";
}
2.application中初始化
package com.example.myapplication
import android.app.Application
import com.alibaba.android.arouter.launcher.ARouter
class Apps: Application(){
//Arouter调试开关
private val isDebugArouter : Boolean =true;
override fun onCreate() {
super.onCreate()
if (isDebugArouter) {
ARouter.openLog()
ARouter.openDebug()
}
ARouter.init(this)
}
}
3.MainActivity中的跳转
package com.example.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import com.alibaba.android.arouter.launcher.ARouter
import com.example.myapplication.aaa.RouterPathCons
class MainActivity : AppCompatActivity(),View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
ARouter.getInstance().inject(this)
setContentView(R.layout.activity_main)
val btr1= findViewById<Button>(R.id.bt_r1);
val btr2= findViewById<Button>(R.id.bt_r2);
val btr3= findViewById<Button>(R.id.bt_r3);
val btr4= findViewById<Button>(R.id.bt_r4);
btr1.setOnClickListener(this)
btr2.setOnClickListener(this)
btr3.setOnClickListener(this)
btr4.setOnClickListener(this)
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.bt_r1 -> {
ARouter.getInstance().build(RouterPathCons.RouterActivity1).navigation()
}
R.id.bt_r2 -> {
ARouter.getInstance().build(RouterPathCons.RouterActivity2)
.withByte("p_byte",88)
.withBoolean("p_bool",false)
.withChar("p_char",'u')
.withDouble("p_double",0.34)
.withFloat("p_float",0.12f)
.navigation()
}
R.id.bt_r3 -> {
ARouter.getInstance().build(RouterPathCons.RouterActivity3).navigation()
}
R.id.bt_r4 -> {
ARouter.getInstance().build(RouterPathCons.RouterActivity4)
.withByte("p_byte",99)
.withBoolean("p_bool",true)
.withChar("p_char",'j')
.withDouble("p_double",0.88)
.withFloat("p_float",0.77f)
.navigation()
}
else -> {
}
}
}
}
4.其他的类
JavaRouter1Activity
package com.example.myapplication.aaa;
import android.app.Activity;
import android.os.Bundle;
import androidx.annotation.Nullable;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.example.myapplication.R;
@Route(path = RouterPathCons.RouterActivity3)
public class JavaRouter1Activity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_route3);
}
}
JavaRouter2Activity
package com.example.myapplication.aaa;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.Nullable;
import com.alibaba.android.arouter.facade.annotation.Autowired;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;
import com.example.myapplication.R;
import kotlin.jvm.JvmField;
@Route(path = RouterPathCons.RouterActivity4)
public class JavaRouter2Activity extends Activity {
@Autowired(name = "p_char")
char cuchar;
@Autowired(name = "p_float")
float a;
@Autowired(name = "p_double")
double b;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ARouter.getInstance().inject(this);
setContentView(R.layout.activity_route4);
Log.e("======",cuchar+","+"float:"+a+",double:"+b);
}
}
KtRouter1Activity
package com.example.myapplication.aaa
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.example.myapplication.R
@Route(path = RouterPathCons.RouterActivity1)
class KtRouter1Activity :AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_route1)
ARouter.getInstance().inject(this)
}
}
RouterActivity2
package com.example.myapplication.aaa
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.alibaba.android.arouter.facade.annotation.Autowired
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.example.myapplication.R
@Route(path = RouterPathCons.RouterActivity2)
class RouterActivity2 :AppCompatActivity() {
@Autowired(name="p_byte")
@JvmField
var mbyte:Byte=0
@Autowired(name="p_float")
@JvmField
var mfloat:Float=0.0f
@Autowired(name="p_double")
@JvmField
var mdouble:Double=-1.0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_route2)
ARouter.getInstance().inject(this)
Log.e("KtRouter2","Byte:$mbyte ,Float:$mfloat ,Double:$mdouble")
}
}
需要注意的是:使用ARouter跳转
1.目标Activity必须配置
@Route(path="路径")
2.如果目标Activity需要接收携带过来的参数除了要配置
ARouter.getInstance().inject(this)
@Autowired(name="需要与传递过来的Key一致")
如果是Kotlin类的Activity 需要加上@JvmField 使变量非私有,否则编译会报错
ARouter::Compiler An exception is encountered, [The inject fields CAN NOT BE 'private'!!! please check field [mdouble] in class [com.example.myapplication.aaa.RouterActivity2]]
The inject fields CAN NOT BE 'private'!!!
我就匆匆忙忙引入试了一下 还有其他没介绍的 之后有时间再写