我们传统打开Activity页面,通过创建Intent
对象,并传值给startActivity()
方法。
传统方法:1
2val intent = Intent(activity, NextActivity::class)
activity.startActivity(intent)
如果需要传多个参数时:1
2
3
4val intent = Intent(activity, NextActivity::class)
intent.putExtra("int", 1)
intent.putExtra("string", "str")
activity.startActivity(intent)
现在,我们用Kotlin的Extension方法来简单,快捷打开Activity页面1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31inline fun <reified T : Any> Activity.launchActivity (
requestCode: Int = -1,
options: Bundle? = null,
noinline init: Intent.() -> Unit = {})
{
val intent = newIntent<T>(this)
intent.init()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
{
startActivityForResult(intent, requestCode, options)
} else {
startActivityForResult(intent, requestCode)
}
}
inline fun <reified T : Any> Context.launchActivity (
options: Bundle? = null,
noinline init: Intent.() -> Unit = {})
{
val intent = newIntent<T>(this)
intent.init()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
{
startActivity(intent, options)
} else {
startActivity(intent)
}
}
inline fun <reified T : Any> newIntent(context: Context): Intent =
Intent(context, T::class.java)
使用方法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24// 简单使用
launchActivity<NextActivity>()
// 添加传递参数
launchActivity<NextActivity> {
putExtra("int", 1)
}
// 添加flag
launchActivity<NextActivity> {
putExtra("int", 1)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
}
// 添加Transistions
val options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, avatar, "avatar")
launchActivity<NextActivity>(options = options) {
putExtra("int", 1)
}
// 用startActivityForResult()启动
launchActivity<NextActivity>(requestCode = 1234) {
putExtra("int", 1)
}