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

2021-08-25 18:28:33 字數 2921 閱讀 6713

[color=blue][size=large]大致步驟[/size][/color]:

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

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

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

[size=large]讓子activity有返回值[/size]

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

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

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

[size=large]啟動子activity[/size]

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

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

private static final int show_subactivity = 1;

intent intent = new intent(this, myotheractivity.class);

startactivityforresult(intent, show_subactivity);

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

private static final int pick_contact_subactivity = 2;

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

intent intent = new intent(intent.action_pick, uri);

startactivityforresult(intent, pick_contact_subactivity);

[size=large]返回值[/size]

當子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()

});

[size=large]處理子activity的結果[/size]

當子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 int show_sub_activity_one = 1;

private static final int show_sub_activity_two = 2;

@override

public void onactivityresult(int requestcode, int resultcode, intent data)

break;

}case (show_sub_activity_two) :

break;}}

}

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

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

Android中啟動另外乙個Activity

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

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

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