Android学习(十三):两个Activity之间相互传数据(双向),使用startActivityForResult

若要在两个Activity之间进行双向相互传递数据,可以使用 startActivityForResult() 方法来启动另一个Activity,并通过重写 onActivityResult() 方法来接收返回的数据。

以下是一个双向数据传递的示例:

在发送端Activity(Activity A)中:

public class ActivityA extends AppCompatActivity {
    private static final int REQUEST_CODE = 1;

    private void sendDataToActivityB() {
    //发送数据
        Intent intent = new Intent(ActivityA.this, ActivityB.class);
        intent.putExtra("data", "Hello from Activity A");
        startActivityForResult(intent, REQUEST_CODE);
    }

//接收数据
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK && data != null) {
            String receivedData = data.getStringExtra("data");
            // 在这里处理从Activity B返回的数据
        }
    }
}

在接收端Activity(Activity B)中:

public class ActivityB extends AppCompatActivity {

	private void receiveDataToActivityA() {
    //接收数据
        Intent intent = getIntent();
        String str=intent.getExtraString("data");
    }

    private void sendBackDataToActivityA() {
    //发送数据
        Intent intent = new Intent();
        intent.putExtra("data", "Hello from Activity B");
        setResult(RESULT_OK, intent);
        finish();
    }
}

从Activity A中调用 startActivityForResult() 方法,并在Intent中添加数据,然后指定一个请求代码以及启动Activity B。Activity B可以通过 setResult() 方法设置结果码和数据,并在完成逻辑后调用 finish() 方法返回到Activity A。

然后,Activity A中的 onActivityResult() 方法会被触发,您可以在其中获取结果码和返回的数据。

请注意,当Activity B调用 setResult() 后,会触发Activity A的 onActivityResult() 方法,这意味着您可以在 onActivityResult() 中处理来自不同Activity的数据。


希望这个示例有助于在Android开发中,您可以使用startActivityForResult()方法在两个Activity之间进行双向传递数据。这种方式适用于需要从第二个Activity返回数据给第一个Activity的情况。以下是使用startActivityForResult()方法的基本步骤:

  1. 在第一个Activity中使用startActivityForResult()启动第二个Activity,并在调用中传递请求码(requestCode)。
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);
  1. 在第二个Activity中根据需要处理相关逻辑,并将要返回的数据放入Intent中。
Intent intent = new Intent();
intent.putExtra("data", "Hello from SecondActivity");
setResult(Activity.RESULT_OK, intent);
  1. 在第二个Activity中调用finish()方法关闭Activity,同时将带有数据的Intent返回到第一个Activity。

  2. 在第一个Activity中重写onActivityResult()方法,以接收第二个Activity返回的数据。

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
        if (data != null) {
            String receivedData = data.getStringExtra("data");
            // 在这里处理接收到的数据
        }
    }
}

通过上述步骤,第一个Activity启动第二个Activity时传递了请求码(REQUEST_CODE),然后第二个Activity在返回数据给第一个Activity时设置了返回码(RESULT_OK)和传递数据的Intent。第一个Activity在onActivityResult()方法中检查返回的请求码和结果码,以获得返回的数据并进行相应处理。

请注意,请求码和结果码都是整型常量,您可以自行定义。确保在处理返回数据时进行适当的空值检查。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值