Activity Results API
Activity Results API 是 Google官方推荐的Activity、Fragment获取数据的方式。
Activity Results API 到底怎么用?相比onActivityResult
有哪些优势?接下来,将一一为你解答。
在介绍如何使用之前,先为大家介绍Activity Results API 中两个重要的组件:ActivityResultContract
和ActivityResultLauncher
。
ActivityResultContract
: 协议,它定义了如何传递数据和如何处理返回的数据。ActivityResultContract
是一个抽象类,你需要继承它来创建自己的协议,每个ActivityResultContract
都需要定义输入和输出类,如果您不需要任何输入,可使用 Void(在 Kotlin 中,使用 Void? 或 Unit)作为输入类型。ActivityResultLauncher
: 启动器,调用ActivityResultLauncher
的launch
方法来启动页面跳转,作用相当于原来的startActivity()
使用 Activity Results API 在Activity之间传递数据
1.
首先,在app下的build.gradle
中加入依赖:
implementation 'androidx.activity:activity:1.2.0-beta01'
implementation 'androidx.fragment:fragment:1.3.0-beta01'
2.
定义协议
新建一个Contract类,继承自ActivityResultContract<I,O>
,其中,I
是输入的类型,O
是输出的类型。需要实现2个方法,createIntent
和parseResult
,输入类型I
作为createIntent
的参数,输出类型O
作为parseResult
方法的返回值,在下面的例子中,输入输出类型都是String:
class MyActivityResultContract: ActivityResultContract<String,String>(){
override fun createIntent(context: Context, input: String?): Intent {
return Intent(context,SecondActivity::class.java).apply {