今天使用Activity Result API进行页面之间的传值,结果出现
java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
先上代码
ActivityResultLauncher<String> launcher;
//registerForActivityResult方法由ComponentActivity或者Fragment提供,接受2个参数,第一个参数就是我们定义的Contract协议,第二个参数是一个回调ActivityResultCallback<O>,其中O就是前面Contract的输出类型
launcher = registerForActivityResult(new ResultContract(), new ActivityResultCallback<String>() {
@Override
public void onActivityResult(String result) {
Toast.makeText(ServicePackageActivity.this, result, Toast.LENGTH_SHORT).show();
}
});
//继承ActivityResultContract<I,O>,其中,I是输入的类型,O是输出的类型
class ResultContract extends ActivityResultContract<String, String>
{
@NonNull
@Override
public Intent createIntent(@NonNull Context context, String input) {
Intent intent = new Intent(ServicePackageActivity.this, ServicePackageDetailActivity.class);
intent.putExtra("b", input);
return intent;
}
@Override
public String parseResult(int resultCode, @Nullable Intent intent) {
return intent.getStringExtra("s");
}
}
//点击等事件触发跳转
launcher.launch("测试");
第二个activity的操作
binding.btnAddCar.setOnClickListener(view1 -> {
setResult(RESULT_OK, new Intent().putExtra("result", "哈哈哈"));
finish();
});
然后出现错误,原因是少引入了androidx.fragment,引入即可
api "androidx.activity:activity:1.2.2"
api "androidx.fragment:fragment:1.3.6"