Android 快速跳转库
事情起源
activity 或者 fragment 每次跳转传值的时候,你是不是都很厌烦那种,参数传递。 那么如果数据极其多的情况下,你的代码将苦不堪言,即使在很好的设计下,也会很蛋疼。那么今天我给大家推荐一个工具 和咱原生跳转进行比较
比较:
1.跳转方式比较
bash Intenti=new Intent(this,MainActivity.class); 
startActivity(i);vs
ApMainActivity.newInstance().start(this)
//发送  Intenti=new Intent(this,MainActivity.class);
Bundle bundle = new Bundle(); 
bundle.putInt("message", "123"); 
i.putExtra("Bundle", bundle); 
startActivity(i); 
//接收 
String s=bundle.getString("message","");vs
//发送 
 ApMainActivity.newInstance().apply { message = "123" } .start(this) 
//接收 
 AutoJ.inject(this);实体发送
//发送 
ApAllDataActivity.newInstance().apply { message = "123" myData = MyData("hfafas",true,21) } .start(this) 
//接收
 AutoJ.inject(this);目前 版本号 v1.0.7 更新内容:(专门为kotlin设计的快速跳转工具,如果你的项目只支持java语言请不要用该版本,建议用v1.0.2 地址 Version number v1.0.2) 
1. 代码采用kotlin 语法糖 
2. 支持默认值功能 
3. 不再支持Serializable数据传输,改为性能更好的 Parcelable 大对象传输 
4. 支持多进程activity 跳转 
5. 降低内存占用,可回收内存提升
AutoPage
github地址 https://github.com/smartbackme/AutoPage 
如果觉得不错 github 给个星 Android 容易的跳转工具
注意事项:
必须有如下两个要求
androidx
kotlin & java
支持传输类型
bundle 支持的基本类型都支持(除ShortArray) 以下类型都支持,如果类型不是如下类型,可能会报kapt错误
:Parcelable
String
Long
Int
Boolean
Char
Byte
Float
Double
Short
CharSequence
CharArray
IntArray
LongArray
BooleanArray
DoubleArray
FloatArray
ByteArray
ArrayList
ArrayList<:Parcelable>
Array<:Parcelable>###使用
project : build.gradle 项目的gradle配置
   buildscript { repositories { maven { url 'https://www.jitpack.io' } } 
在你的每个需要做容易跳转的模块添加如下配置
3. 你的项目必须要支持 kapt
4. kotlin kapt
5. 你的项目必须支持 @Parcelize 注解 也就是必须添加
apply plugin: 'kotlin-android-extensions' 
apply plugin: 'kotlin-android-extensions' 
apply plugin: 'kotlin-kapt'
android { androidExtensions { experimental = true } }
kapt com.github.smartbackme.AutoPage:autopage-processor:1.0.7
implementation com.github.smartbackme.AutoPage:autopage:1.0.7重点
- @AutoPage 只能在字段或者类上标注
 
- Ap 作为前缀,为你快速跳转
 
kotlin:
1. 字段必须标注 @JvmField 和 @AutoPage
2. onCreate 中 在你的需要跳转的页面加入 AutoJ.inject(this)
java:
1. 字段必须标注 @AutoPage
2. onCreate 中 在你的需要跳转的页面加入 AutoJ.inject(this)
### Activity 中使用
例1
简单的跳转
@AutoPage 
class SimpleJump1Activity : AppCompatActivity() { 
override fun onCreate(savedInstanceState: Bundle?) { 
super.onCreate(savedInstanceState) 
 setContentView(R.layout.activity_simple_jump1)
 } 
}之后调用
ApSimpleJump1Activity.newInstance().start(this)例2
简单的跳转并且带参数
class MainActivity2 : AppCompatActivity() {
var message:String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main2)
    AutoJ.inject(this)
    findViewById(R.id.text).text = message
}之后调用
ApMainActivity2.newInstance().apply { message = "123" } .start(this)例3:
跳转带有result
@AutoPage class SimpleJumpResultActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) {     super.onCreate(savedInstanceState)     setContentView(R.layout.activitysimplejump_result) }override fun onBackPressed() {
var intent = Intent()
    intent.putExtra("message","123")
    setResult(RESULT_OK,intent)
super.onBackPressed()
}之后调用
ApSimpleJumpResultActivity.newInstance().apply { requestCode = 1 }.start(this)例4:
实体传输
实体
  
data class MyData(var message:String,var hehehe: Boolean,var temp :Int):Parcelableclass AllDataActivity : AppCompatActivity() {
@AutoPage
@JvmField
var myData:MyData? = null
@AutoPage
@JvmField
var message:String? = "this is default value"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_all_data)
AutoJ.inject(this)
Toast.makeText(this,myData?.toString()+message,Toast.LENGTH_LONG).show()
}之后调用
ApAllDataActivity.newInstance().apply { message = "123" myData = MyData("hfafas",true,21)例5:
默认值
class DefaultValueActivity : AppCompatActivity() {
@AutoPage
@JvmField
var message:String? = "this is default value"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_default_value)
AutoJ.inject(this)
    // var args = intent.getParcelableExtra("123") 
    findViewById(R.id.button6).text = message 
} 
} 
之后调用
ApDefaultValueActivity.newInstance().apply { } .start(this)# 在 fragment 中使用
class FragmentSimpleFragment : Fragment() {
var message:String? = null
companion object {
fun newInstance() = FragmentSimpleFragment()
}
private lateinit var viewModel: SimpleViewModel
override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
return inflater.inflate(R.layout.simple_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
    AutoJ.inject(this)
    viewModel = ViewModelProvider(this).get(SimpleViewModel::class.java)
    view?.findViewById(R.id.message)?.text = message
}
}
之后调用
ApFragmentSimpleFragment.newInstance().apply { message = "123" }.build()下载地址:AutoPage-master.zip