一、什么是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