一、什麼是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-hk/n/243921.html