在Android中,当一个活动启动另一个活动并希望在返回时接收结果时,可以使用意图(Intent)和startActivityForResult()方法。
首先,在启动第二个活动时,使用startActivityForResult()方法而不是普通的startActivity()方法。这样做的目的是为了让第二个活动在完成后返回结果给第一个活动。
第一个活动的代码示例:
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// 处理返回的结果
String result = data.getStringExtra("result");
Log.d("MainActivity", "Received result: " + result);
} else if (resultCode == RESULT_CANCELED) {
// 处理取消操作
Log.d("MainActivity", "Cancelled");
}
}
}
}
第二个活动的代码示例:
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 返回结果给第一个活动
Intent intent = new Intent();
intent.putExtra("result", "Hello from SecondActivity");
setResult(RESULT_OK, intent);
finish();
}
});
}
}
在第二个活动中,当按钮被点击时,我们创建一个新的意图(Intent)并使用setResult()方法将结果返回给第一个活动。在这个示例中,我们将字符串"Hello from SecondActivity"作为结果返回。然后,通过调用finish()方法关闭第二个活动。
在第一个活动中,我们重写了onActivityResult()方法来接收返回的结果。我们首先检查requestCode是否匹配我们在启动第二个活动时定义的请求代码。然后,我们检查resultCode来确定返回的结果是正常完成还是被取消。最后,我们从返回的意图(Intent)中提取结果并进行处理。
这样,当第二个活动关闭并返回结果时,第一个活动的onActivityResult()方法将被调用,并可以处理返回的结果。