1. 程式人生 > >onActivityResult的用法-Activity間回撥傳遞資料

onActivityResult的用法-Activity間回撥傳遞資料

主要功能:

在一個主介面(主Activity)上能連線往許多不同子功能模組(子Activity上去),當子模組的事情做完之後就回到主介面,或許還同時返回一些子模組完成的資料交給主Activity處理。這樣的資料交流就要用到回撥函式onActivityResult。

<1>startActivityForResult(Intent intent, int requestCode);

第一個引數:一個Intent物件

第二個引數:如果> = 0,當Activity結束時requestCode將歸還在onActivityResult()中。以便確定返回的資料是從哪個Activity中返回

<2>onActivityResult(int requestCode, int resultCode, Intent data)

第一個引數:這個整數requestCode提供給onActivityResult,是以便確認返回的資料是從哪個Activity返回的。

            這個requestCode和startActivityForResult中的requestCode相對應。

第二個引數:這整數resultCode是由子Activity通過其setResult()方法返回。

第三個引數:一個Intent物件,帶有返回的資料。

<3>setResult(

int resultCode, Intent data)

呼叫這個方法把Activity想要返回的資料返回到父Activity

第一個引數:當Activity結束時resultCode將歸還在onActivityResult()中,一般為RESULT_CANCELED , RESULT_OK。

第二個引數:一個Intent物件,返回給父Activity的資料。

例項說明:

從母Activity頁面點選按鈕進入某子Activity頁面,用到<1>,提前聲明瞭 public static final int REQUSET = 1;

<pre name="code" class="java">case R.id.add:
	Intent intent = new Intent();
	intent.setClass(MainActivity.this, CitySelect.class);
	startActivityForResult(intent, REQUSET);
	break;
子Activity開啟後,處理操作,現在點選按鈕返回母Activity頁面,並攜帶數值回去,用到<3>
<span style="font-family:SimSun;font-size:10px;">public void onClick(View v) {
    //資料是使用Intent返回
     Intent intent = new Intent();
     //把返回資料存入Intent
     intent.putExtra("result", "My name is ******");
     //設定返回資料
      CitySelect.this.setResult(RESULT_OK, intent);
     //關閉Activity
     CitySelect.this.finish();
}</span>
回到母Acitivity,進行處理和相關的操作,用到<2>
public void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
       if (requestCode == REQUSET && resultCode == RESULT_OK) {
       String str = data.getExtras().getString("result");
}

同時我們可以根據返回的requestCode不同,做出相對應的不同操作,例如多個頁面跳轉回調的時候, switch (requestCode) {case 1,case2}。