赞
踩
替代方案:ActivityResultContract
1、如何使用
1.1 定义ActivityResultContract
- //泛型 1-ActivityResultLauncher.launch调用时需要的参数类型
- //泛型 2-回调ActivityResultCallback返回类型
- val activityResultContract = object : ActivityResultContract<Intent, ActivityResult>() {
- override fun createIntent(context: Context, input: Intent): Intent {
- return input
- }
-
- override fun parseResult(resultCode: Int, intent: Intent?): ActivityResult {
- return ActivityResult(resultCode,intent)
- }
- }
1.2 定义ActivityResultCallback
- //页面返回回调
- val activityResultCallback = object : ActivityResultCallback<ActivityResult> {
- override fun onActivityResult(result: ActivityResult?) {
- if (result != null && result.resultCode == RESULT_OK) {
- //todo
- }
- }
- }
1.3 activity或者fragment中进行注册
- //参数 ActivityResultContract ActivityResultCallback
- //返回值 ActivityResultLauncher
- registerForActivityResult = registerForActivityResult(activityResultContract, activityResultCallback)
1.4 ActivityResultLauncher合适时机调用
- //调用
- registerForActivityResult?.launch(Intent(this,DetainmentActivityActivity::class.java))
2、预置实现
2.1 调用
- val registerForActivityResult=registerForActivityResult(ActivityResultContracts.StartActivityForResult(),object : ActivityResultCallback<ActivityResult> {
- override fun onActivityResult(result: ActivityResult?) {
- if (result != null && result.resultCode == RESULT_OK) {
- finish()
- }
- }
- })
- registerForActivityResult.launch(Intent(this,DetainmentActivityActivity::class.java))
2.2 StartActivityForResult代码
public static final class StartActivityForResult extends ActivityResultContract<Intent, ActivityResult> { @NonNull @Override public Intent createIntent(@NonNull Context context, @NonNull Intent input) { return input; } @NonNull @Override public ActivityResult parseResult( int resultCode, @Nullable Intent intent) { return new ActivityResult(resultCode, intent); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。