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


 

歡迎大家光臨我的小店:http://clkk.taobao.com

 

 

大致步驟
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:

Java代碼   收藏代碼
  1. private static final int SHOW_SUBACTIVITY = 1;  
  2.   
  3. Intent intent = new Intent(this, MyOtherActivity.class);  
  4.   
  5. startActivityForResult(intent, SHOW_SUBACTIVITY);  



和正常的Activity一樣,子Activity可以隱式或顯式啟動。下面的框架代碼使用一個隱式的Intent來啟動一個新的子Activity來挑選一個聯系人:

Java代碼   收藏代碼
  1. private static final int PICK_CONTACT_SUBACTIVITY = 2;  
  2.   
  3. Uri uri = Uri.parse(“content://contacts/people”);  
  4.   
  5. Intent intent = new Intent(Intent.ACTION_PICK, uri);  
  6.   
  7. 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返回不同的結果:

Java代碼   收藏代碼
  1. Button okButton = (Button) findViewById(R.id.ok_button);  
  2.   
  3. okButton.setOnClickListener(new View.OnClickListener() {  
  4.   
  5. public void onClick(View view)   
  6.   
  7. {  
  8.   
  9. Uri data = Uri.parse(“content://horses/” + selected_horse_id);  
  10.   
  11. Intent result = new Intent(null, data);  
  12.   
  13. result.putExtra(IS_INPUT_CORRECT, inputCorrect);  
  14.   
  15. result.putExtra(SELECTED_PISTOL, selectedPistol);  
  16.   
  17. setResult(RESULT_OK, result);  
  18.   
  19. finish();  
  20.   
  21. }  
  22.   
  23. });  
  24.   
  25. Button cancelButton = (Button) findViewById(R.id.cancel_button);  
  26.   
  27. cancelButton.setOnClickListener(new View.OnClickListener() {  
  28.   
  29. public void onClick(View view)   
  30.   
  31. {  
  32.   
  33. setResult(RESULT_CANCELED, null);  
  34.   
  35. finish();  
  36.   
  37. }  
  38.   
  39. });  





處理子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事件處理函數:

Java代碼   收藏代碼
    1. private static final int SHOW_SUB_ACTIVITY_ONE = 1;  
    2.   
    3. private static final int SHOW_SUB_ACTIVITY_TWO = 2;  
    4.   
    5. @Override  
    6.   
    7. public void onActivityResult(int requestCode, int resultCode, Intent data) {  
    8.   
    9. super.onActivityResult(requestCode, resultCode, data);  
    10.   
    11. switch(requestCode)   
    12.   
    13. {  
    14.   
    15. case (SHOW_SUB_ACTIVITY_ONE) :   
    16.   
    17. {  
    18.   
    19. if (resultCode == Activity.RESULT_OK)   
    20.   
    21. {  
    22.   
    23. Uri horse = data.getData();  
    24.   
    25. boolean inputCorrect = data.getBooleanExtra(IS_INPUT_CORRECT, false);  
    26.   
    27. String selectedPistol = data.getStringExtra(SELECTED_PISTOL);  
    28.   
    29. }  
    30.   
    31. break;  
    32.   
    33. }  
    34.   
    35. case (SHOW_SUB_ACTIVITY_TWO) :   
    36.   
    37. {  
    38.   
    39. if (resultCode == Activity.RESULT_OK)   
    40.   
    41. {  
    42.   
    43. // TODO: Handle OK click.  
    44.   
    45. }  
    46.   
    47. break;  
    48.   
    49. }  
    50.   
    51. }  
    52.   
    53. 轉載自:http://tianrui-wang-163-com.iteye.com/blog/970464


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM