啟動另外乙個activity,並返回結果

2021-06-27 12:27:07 字數 2996 閱讀 8402

大致步驟

: 1.啟動另外乙個activity,這裡稱子activity; 

2.子activity通過setresult方法設定返回結果,setresult方法帶兩個引數:結果碼和表示為intent的負載值; 

3.父activity通過onactivityresult方法處理子activity返回的結果 

讓子activity有返回值

使用startactivity方式啟動的activity和它的父activity無關,當它關閉時也不會給父activity提供任何反饋。 

你可以啟動乙個activity作為子activity,它與父activity有內在的聯絡。當子activity關閉時,它會觸發父 activity中的乙個事件處理函式。子activity最適合用在乙個activity為其它的activity提供資料(例如使用者從乙個列表中選擇 乙個專案)的場合。 

子activity的建立和普通activity的建立相同,也必須在應用程式的manifest中註冊。任何在manifest中註冊的activity都可以用作子activity。 

啟動子activity

startactivityforresult方法和startactivity方法工作很相似,但有乙個很重要的差異。intent都是用來決定啟動哪個activity,你還可以傳入乙個請求碼。這個值將在後面用來作為有返回值activity的唯一id。 

下面的**顯示了如何啟動乙個子activity: 

private

static

final

intshow_subactivity = 

1;  

intent intent = new

intent(

this

, myotheractivity.

class

);  

startactivityforresult(intent, show_subactivity);  

和正常的activity一樣,子activity可以隱式或顯式啟動。下面的框架**使用乙個隱式的intent來啟動乙個新的子activity來挑選乙個聯絡人: 

private

static

final

intpick_contact_subactivity = 

2;  

uri uri = uri.parse(「content://contacts/people」);

intent intent = new

intent(intent.action_pick, uri);  

startactivityforresult(intent, pick_contact_subactivity);  

返回值當子activity準備關閉時,在finish之前呼叫setresult來給呼叫的activity返回乙個結果。 

setresult方法帶兩個引數:結果碼和表示為intent的負載值。結果碼是執行子activity的結果,一般是 activity.result_ok或activity.result_canceled。在一些情況下,你會希望使用自己的響應代號來處理特定的應用 程式的選擇;setresult支援任何整數值。 

作為結果返回的intent可以包含指向乙個內容(例如聯絡人,**號碼或**檔案)的uri和一組用來返回額外資訊的extra。 

接下來的**片段節選自子activity的oncreate方法,顯示了怎樣向呼叫的activity返回不同的結果: 

button okbutton = (button) findviewbyid(r.id.ok_button);  

okbutton.setonclicklistener(new

view.onclicklistener()   

});  

button cancelbutton = (button) findviewbyid(r.id.cancel_button);  

cancelbutton.setonclicklistener(new

view.onclicklistener()   

});  

處理子activity的結果

當子activity關閉時,它的父activity的onactivityresult事件處理函式被觸發。 

重寫這個方法來處理從子activity返回的結果。onactivityresult處理器接受好幾個引數: 

❑ 請求碼 

曾經用來啟動子activity的請求碼。 

❑ 結果碼 

結果碼是由子activity設定的,用來顯示它的結果。它可以是任何整數值,但典型的值是activity.result_ok和activity.result_cancelled。 

如果子activity非正常關閉或在關閉時沒有指定結果碼,結果碼都是activity.result_canceled。 

❑ 資料 

乙個intent來打包任何返回的資料。依賴於子activity的目的,它可能會包含乙個代表特殊的從列表中選擇的資料的uri。可變通的,或額外的,子activity可以使用「extras」機制以基礎值的方式返回臨時資訊。 

下面的框架**實現了乙個activity中的onactivityresult事件處理函式: 

private

static

final

intshow_sub_activity_one = 

1;  

private

static

final

intshow_sub_activity_two = 

2;  

@override

public

void

onactivityresult(

intrequestcode, 

intresultcode, intent data)   

break

;  }  

case

(show_sub_activity_two) :   

break

;  }  

}  } 

啟動另外乙個Activity,並返回結果

color blue size large 大致步驟 size color 1.啟動另外乙個activity,這裡稱子activity 2.子activity通過setresult方法設定返回結果,setresult方法帶兩個引數 結果碼和表示為intent的負載值 3.父activity通過ona...

Android中啟動另外乙個Activity

啟動另外乙個 activity activity.startactivity 方法可以根據傳入的引數啟動另外乙個 activity intent intent new intent currentactivity.this,otheractivity.class startactivity inte...

在乙個程式中啟動另外乙個程式

最近剛剛開始工作,發現在學校學習的那些基本上知識打打基礎而已,在實際的專案運作中根本就沒用。革命尚未成功,通知仍需努力啊 嘿嘿 上正題 因為我們需要做乙個類似於監控的系統,這樣的話就涉及到多個程式需要同時執行,並且需要有乙個程式 去控制另外乙個程式,之前沒有做過,也沒見過,不過還好,有一同事之前做過...