Skip to content

Longan – Activity

DylanCai edited this page Oct 29, 2021 · 3 revisions

跳转 Activity

简单地跳转:

startActivity<SomeOtherActivity>()

带参数跳转:

startActivity<SomeOtherActivity>("id" to 5)

带参数跳转推荐用下面的写法:

class SomeActivity : AppCompatActivity() {
  private val id: String by safeIntentExtras(KEY_ID)

  //...

  companion object {
    fun start(id: String) = startActivity<SomeActivity>(KEY_ID to id)
  }
}
SomeActivity.start(id)

编写一个静态的 start() 方法传入所需的参数并跳转,在跳转的页面通过委托的方式获取值,可查看 Intent 的用法。调用静态方法跳转可以避免传漏或传错参数。

带参数结束 Activity

startActivityForResult() 跳转的页面往往需要在结束的时候带上回调的结果,一般需要几行代码来实现。比如:

val intent = Intent()
intent.putExtra("id", 5)
intent.putExtra("name", name)
setResult(RESULT_OK, intent)
finish()

几行代码有点繁琐,所以提供了一种更简单的方式能用一行代码实现:

finishWithResult("id" to 5, "name" to name)

Activity 堆栈管理

提供了常用的 Activity 堆栈管理功能:

方法或属性 作用
activityList 获取 Activity 堆栈的列表
topActivity 获取栈顶的 Activity
isActivityExistsInStack<T>() 判断 Activity 是否在堆栈中
finishActivity<T>() 结束某个 Activity
finishAllActivities() 结束所有 Activity
finishAllActivitiesExceptNewest() 结束除了最新以外的所有 Activity

双击返回键退出

快速实现双击返回键退出:

pressBackTwiceToExitApp("再次点击退出应用")

默认 2 秒内第二次点击返回键才退出,可以传多一个参数修改间隔时间:

pressBackTwiceToExitApp("再次点击退出应用", delayMillis = 1500)

如果需要自定义吐司或者换成 Snackbar

pressBackTwiceToExitApp {
  snackbar("再次点击退出应用")
}

点击返回键不退出

有时需要点击返回不退出应用,直接返回桌面:

pressBackToNotExitApp()

强转 Activity

有些时候作用域内的 this 不是 Activity,这时我们用到 Activity 就要指明用哪个 this,比如 this@SignInActivity。所以增加了拓展属性 context, activity, fragmentActivity, lifecycleOwner,将 Activity 强转成对应的类型进行使用,可以简化代码,提高代码的可读性。