通过子Activity返回数据给父Activity
在Android开发中,父Activity可以通过启动子Activity并接收其返回结果来实现数据交互。以下是实现这一功能的详细步骤和代码示例。
1. 启动子Activity
父Activity可以使用startActivityForResult方法启动子Activity,并传递请求码以便后续区分不同的子Activity返回结果。
// 定义请求码
private static final int REQUEST_CODE = 1;
// 启动子Activity
Intent intent = SubActivity.newIntent(this, someData);
startActivityForResult(intent, REQUEST_CODE);
2. 子Activity设置返回结果
在子Activity中,当需要返回数据时,可以通过创建一个Intent对象,附加额外信息后调用setResult方法将结果发送回父Activity。
// 定义返回数据的键值对
private static final String EXTRA_RESULT = "com.example.app.result";
// 设置返回结果
private void sendResult(boolean resultValue) {
Intent data = new Intent();
data.putExtra(EXTRA_RESULT, resultValue);
setResult(RESULT_OK, data); // 使用RESULT_OK表示成功
finish(); // 结束当前Activity
}
3. 父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) {
if (data != null) {
boolean result = data.getBooleanExtra(SubActivity.EXTRA_RESULT, false);
handleResult(result); // 处理返回的结果
}
}
}
private void handleResult(boolean result) {
// 根据返回结果执行相应操作
}
4. 示例代码
父Activity(Main Activity)
package com.example.myapp;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE = 1;
private Button mButton;
private boolean mResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = findViewById(R.id.start_button);
mButton.setOnClickListener(v -> {
Intent intent = SubActivity.newIntent(this, true);
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) {
if (data != null) {
mResult = data.getBooleanExtra(SubActivity.EXTRA_RESULT, false);
// 根据mResult执行逻辑
}
}
}
}
子Activity(Sub Activity)
package com.example.myapp;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class SubActivity extends AppCompatActivity {
private static final String EXTRA_IS_TRUE = "com.example.app.is_true";
private static final String EXTRA_RESULT = "com.example.app.result";
private boolean mIsTrue;
public static Intent newIntent(Context context, boolean isTrue) {
Intent intent = new Intent(context, SubActivity.class);
intent.putExtra(EXTRA_IS_TRUE, isTrue);
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub);
mIsTrue = getIntent().getBooleanExtra(EXTRA_IS_TRUE, false);
Button confirmButton = findViewById(R.id.confirm_button);
confirmButton.setOnClickListener(v -> sendResult(true));
}
private void sendResult(boolean result) {
Intent data = new Intent();
data.putExtra(EXTRA_RESULT, result);
setResult(RESULT_OK, data);
finish();
}
}
通过以上步骤和代码示例,父Activity可以成功从子Activity获取返回结果并进行处理。