一、什麼是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/zh-tw/n/243921.html
微信掃一掃
支付寶掃一掃