在Android应用开发中,Activity间数据传递与交互是常见的需求。通过使用onActivityResult回调,开发者可以轻松实现不同Activity之间的数据共享。本文将详细介绍onActivityResult的原理、使用方法以及注意事项。

基本概念

onActivityResult是Activity类中的一个方法,它用于处理启动一个新的Activity后返回的结果。当用户从新启动的Activity返回时,系统会调用这个方法,并将返回的结果传递给开发者。

原理

在Android中,启动一个新的Activity时,系统会创建一个新的任务栈(Task),并将新的Activity放入栈顶。当用户点击返回按钮或按下物理返回键时,新的Activity会从任务栈中弹出,此时系统会调用上一个Activity的onActivityResult方法,并将新Activity返回的结果传递给开发者。

使用方法

  1. 设置启动Activity的请求代码:在启动新的Activity时,需要为这次启动设置一个请求代码(requestCode)。这个请求代码用于标识这次启动的Activity。
Intent intent = new Intent(this, TargetActivity.class);
startActivityForResult(intent, REQUEST_CODE);
  1. 重写onActivityResult方法:在启动Activity的父Activity中,重写onActivityResult方法,接收新Activity返回的结果。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        // 获取新Activity返回的数据
        String result = data.getStringExtra("result");
        // 处理返回的数据
    }
}
  1. 传递数据:在新启动的Activity中,可以通过setResult方法返回数据给启动它的Activity。
Intent resultIntent = new Intent();
resultIntent.putExtra("result", "数据");
setResult(RESULT_OK, resultIntent);
finish();

注意事项

  1. 请求代码的唯一性:请求代码应该具有唯一性,避免与其他请求代码冲突。

  2. 正确处理返回结果:在onActivityResult方法中,需要根据requestCode和resultCode正确处理返回结果。

  3. 避免在非Activity类中调用onActivityResultonActivityResult方法仅适用于Activity类,在其他类中调用将导致异常。

  4. 不要在Activity中启动自己:在Activity中启动自己时,不要使用startActivityForResult,否则会导致无限循环。

实例分析

以下是一个简单的实例,演示了如何使用onActivityResult实现两个Activity之间的数据传递:

Activity A

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

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
            String result = data.getStringExtra("result");
            // 处理返回的数据
        }
    }

    public void startActivityB(View view) {
        Intent intent = new Intent(this, ActivityB.class);
        startActivityForResult(intent, REQUEST_CODE);
    }
}

Activity B

public class ActivityB extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent resultIntent = new Intent();
                resultIntent.putExtra("result", "数据");
                setResult(RESULT_OK, resultIntent);
                finish();
            }
        });
    }
}

通过以上实例,可以看到如何使用onActivityResult实现Activity间数据传递与交互。

总结:

掌握onActivityResult回调是Android应用开发中的一项基本技能。通过本文的介绍,相信你已经对onActivityResult有了更深入的了解。在实际开发过程中,灵活运用onActivityResult,可以轻松实现Activity间数据传递与交互。