一、什么是onActivityResult
Android中,Activity之间经常需要进行数据交互。当一个Activity需要启动另一个Activity来获取某些数据时,启动的Activity称为被调用方Activity,调用方Activity则需要接收从被调用方Activity返回的数据。这时就需要用到onActivityResult。
onActivityResult是一个方法,用于处理被调用方返回的数据。被调用方Activity在返回数据时调用setResult()方法,并将结果作为参数传递给setResult()方法。调用方Activity在接收被调用方返回数据时,会回调onActivityResult()方法并接收数据。
二、onActivityResult的使用步骤
以下是onActivityResult的使用步骤:
1、在调用方Activity中通过startActivityForResult()方法启动被调用方Activity,启动代码如下:
Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivityForResult(intent, REQUEST_CODE);
其中REQUEST_CODE是一个整数,用于在调用方Activity中确定是哪一个Activity返回的数据。
2、在被调用方Activity中设置返回数据并调用finish()方法返回到调用方Activity,返回代码如下:
Intent intent = new Intent();
intent.putExtra("data", "Hello World");
setResult(RESULT_OK, intent);
finish();
其中”Hello World”是要返回的数据,RESULT_OK是一个常量,表示返回成功。
3、在调用方Activity中重写onActivityResult()方法接收数据,代码如下:
@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 result = data.getStringExtra("data");
Log.d("MainActivity", "Result: " + result);
}
}
其中requestCode参数就是第1步中的REQUEST_CODE,resultCode参数是返回数据是否成功的标识,data是Intent对象,包含了被调用方Activity返回的数据。
三、注意事项
以下是onActivityResult使用过程中需要注意的事项:
1、startActivityForResult()和setResult()都是Activity的方法,需要在Activity中使用。
2、被调用方Activity返回数据时,必须调用setResult()方法才能返回数据。
3、从被调用方Activity返回数据时,requestCode、resultCode、data三个参数都必须传递回调用方Activity。
4、在调用方Activity中接收数据时,需要判断requestCode和resultCode是否符合预期。
5、在调用方Activity中接收数据时,需要判断data是否为空,因为被调用方Activity可能不返回数据。
6、如果多个Activity都会返回数据给调用方Activity,可以使用requestCode来区分是哪个Activity返回的数据。
四、完整代码示例
下面是一个完整的例子:
1、在MainActivity中启动SecondActivity:
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);
findViewById(R.id.btn_start_second_activity).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
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 result = data.getStringExtra("data");
Log.d("MainActivity", "Result: " + result);
}
}
}
2、在SecondActivity中返回数据:
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
findViewById(R.id.btn_back_to_main_activity).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.putExtra("data", "Hello World");
setResult(RESULT_OK, intent);
finish();
}
});
}
}
3、在布局文件中添加按钮以启动SecondActivity并返回数据:
以上是onActivityResult的使用方法和一个完整的例子,可以用于在Activity之间传递数据。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/243921.html
微信扫一扫
支付宝扫一扫