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):Parcelable
class 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