registerForActivityResult()方法的简单理解和使用

本文介绍如何使用registerForActivityResult实现Activity间的数据传递。通过示例代码详细展示了如何在FirstActivity中启动SecondActivity并接收返回的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近学到了registerForActivityResult,简单理解一下:
1、使用registerForActivityResult为获取到的结果注册结果回调,但其本身不会启动intent跳转
2、registerForActivityResult最后会返回一个ActivityResultLauncher对象用于启动intent跳转
3、registerForActivityResult第一个参数是ActivityResultContracts,除了通用的StartActivityForResult,还有TakePicture(拍照)、RequestPermission(请求单个权限)、PickContact(从通讯录获取联系人)等预定义好的contract
4、第二个参数中的onActivityResult() 方法用于处理获取到的数据结果

深入理解参考以下两篇文章:
https://www.cnblogs.com/–here–gold–you–want/p/14841024.html
http://www.icodebang.com/article/264591

SecondActivity的数据返回给FirstActivity,代码如下:

一、FirstActivity.java
public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //该方法要放在onCreate里面,不能放在监听器里
        ActivityResultLauncher launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                if(result.getResultCode() == Activity.RESULT_OK){
                    Log.d("data_return", result.getData().getStringExtra("data_return"));
                }
            }
        });

        Button button1 = (Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                launcher.launch(intent);//启动intent跳转
            }
        });
    }
}
二、SecondActivity.java
public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        Button button2 = (Button) findViewById(R.id.button_2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.putExtra("data_return","the data of returning to FirstActivity");
                setResult(RESULT_OK,intent);
                finish();
            }
        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值