方案"/>
startActivityForResult替代方案
startActivityForResult过时
替代方案: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 StartActivityForResultextends ActivityResultContract<Intent, ActivityResult> {
@NonNull@Overridepublic Intent createIntent(@NonNull Context context, @NonNull Intent input) {return input;}
@NonNull@Overridepublic ActivityResult parseResult(int resultCode, @Nullable Intent intent) {return new ActivityResult(resultCode, intent);}
}
更多推荐
startActivityForResult替代方案
发布评论