在Activity中有個onActivityResult方法,如果Activity A使用startActivityForResult方法跳轉到其他Activity,當再次傳回到Activity A時就會觸發onActivityResult方法。
先寫下使用總結:
1.建立一個REQUST_CODE
2.在Activity A通過startActivityForResult啟動Activity B
3.在Activity B中使用intent攜帶資料,setResult設定資料結果,在finish方法執行後傳回結果資料
4.在Activity A中使用onActivityResult方法,根據不同的request_code,從Intent中擷取資料做不同處理。
來說下onActivityResult中的參數:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
requestCode:請求碼,在startActivityForResult中會發送一個Int類型的請求碼,傳回到Activity A的時候就會擷取當初發送出去的請求碼。(多個startActivityForResult的時候用requestCode以判斷并執行不同的操作。)
resultCode:結果碼,通常情況下都會傳回RESULT_OK(-1),其他兩種沒有試出來。
data:intent用于傳遞傳回的資料。
自己寫了個demo來測試onActivityResult方法:
MainActivity:
public class MainActivity extends AppCompatActivity {
private Button btnEnter01,btnEnter02;
private TextView tvResult,tvResult02;
private final static int REQUEST_CODE = 1000;//設定請求碼
private final static int REQUEST_CODE_02 = 1001;//設定請求碼
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnEnter01 = (Button) findViewById(R.id.btnEnter);
btnEnter02 = (Button) findViewById(R.id.btnEnter02);
tvResult = (TextView) findViewById(R.id.tvResult);
tvResult02 = (TextView) findViewById(R.id.tvResult02);
btnEnter01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(MainActivity.this,FirstActivity.class),REQUEST_CODE);//發送請求碼并進入第二個Activity
}
});
btnEnter02.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(MainActivity.this,SecondActivity.class),REQUEST_CODE_02);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("uding", "in onActivityResult");
Log.e("uding","requestCode = " + requestCode + " resultCode = " + resultCode);
/*這裡實測了RESULT_FIRST_USER和RESULT_CANCELED,結果發現傳回的都是RESULT_OK*/
if (resultCode == RESULT_OK){//當第二個Activity中結果碼為RESULT_OK
if (requestCode == REQUEST_CODE) {//這裡通過startActivityForResult方法中的REQUEST_CODE來判斷(如果有多個)
String result = data.getExtras().getString("RESULT_STRING");
tvResult.setText(result);
}
if (requestCode == REQUEST_CODE_02){
String result = data.getExtras().getString("RESULT_STRING");
tvResult02.setText(result);
}
}
}
}
FirstActivity:
public class FirstActivity extends AppCompatActivity {
private Button btnBack;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
btnBack = (Button) findViewById(R.id.btnBack);
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent();
i.putExtra("RESULT_STRING","FirstActivity接收成功");
setResult(Activity.RESULT_OK, i);
finish();
}
});
}
}
SecondActivity和FirstActivity的代碼一樣的,就不貼出來了。
運作結果:從MainActivity分别跳轉到FirstActivity和SecondActivity,在傳回到MainActivity後,兩個TextView的内容都改變了。