要引用ActivityResultRegistry,您需要遵循以下步骤:
implementation 'androidx.activity:activity-ktx:1.2.3'
这将为您提供与ActivityResultRegistry相关的类和方法。
class MyActivity : AppCompatActivity() {
private lateinit var someActivityResultLauncher: ActivityResultLauncher
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 初始化ActivityResultLauncher,并与ActivityResultRegistry关联
someActivityResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
// 在这里处理返回的结果
if (result.resultCode == Activity.RESULT_OK) {
// 处理成功的情况
val data: Intent? = result.data
// 处理返回的数据
} else {
// 处理失败的情况
}
}
}
// 启动某个Activity
fun startSomeActivity() {
val intent = Intent(this, SomeActivity::class.java)
someActivityResultLauncher.launch(intent)
}
}
在上面的代码中,我们使用ActivityResultContracts.StartActivityForResult()创建了一个ActivityResultLauncher,并在lambda表达式中处理返回的结果。然后,我们可以使用someActivityResultLauncher.launch(intent)启动某个Activity,并在回调中处理返回的结果。
class MyViewModel(private val activityResultRegistry: ActivityResultRegistry) : ViewModel() {
private lateinit var someActivityResultLauncher: ActivityResultLauncher
init {
someActivityResultLauncher = activityResultRegistry.register("some_key", ActivityResultContracts.StartActivityForResult()) { result ->
// 在这里处理返回的结果
if (result.resultCode == Activity.RESULT_OK) {
// 处理成功的情况
val data: Intent? = result.data
// 处理返回的数据
} else {
// 处理失败的情况
}
}
}
// 启动某个Activity
fun startSomeActivity() {
val intent = Intent(context, SomeActivity::class.java)
someActivityResultLauncher.launch(intent)
}
}
在上面的代码中,我们将ActivityResultRegistry作为构造函数的参数传递给ViewModel,并使用activityResultRegistry.register()方法来创建ActivityResultLauncher。然后,我们可以在ViewModel中使用someActivityResultLauncher.launch(intent)来启动某个Activity,并在回调中处理返回的结果。
这就是使用Android Activity Result API与ViewModel中的ActivityResultRegistry的解决方法,其中包含了相关的代码示例。希望对您有帮助!