2013-11-21 53 views
8

我想在其他活動中調用mainactivity的方法。爲此,我研究了很多,發現使用OnActivityResult是最佳選擇。任何人都可以請示例幫助下解釋如何使用這種方法?我經歷了類似的問題,但發現它們令人困惑。 謝謝!使用onactivityresult android

編輯:我有我的應用程序中的自定義對話框活動。它會詢問用戶是否要開始新遊戲,並且它有兩個按鈕「是」和「否」。我想實現上述方法只是爲了獲得按下的按鈕。

回答

28

定義常量

public static final REQUEST_CODE = 1; 

使用呼叫您的自定義對話框活動意圖

Intent intent = new Intent(Activity.this, 
        CustomDialogActivity.class); 
      startActivityForResult(intent , REQUEST_CODE); 

現在使用onActivityResult檢索結果

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     try { 
      super.onActivityResult(requestCode, resultCode, data); 

      if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { 

       String requiredValue = data.getStringExtra("Key"); 
      } 
     } catch (Exception ex) { 
      Toast.makeText(Activity.this, ex.toString(), 
        Toast.LENGTH_SHORT).show(); 
     } 

    } 

在定製對話活動中使用此代碼來設置導致

Intent intent = getIntent(); 
intent.putExtra("key", value); 
setResult(RESULT_OK, intent); 
finish(); 
+0

我應該在自定義對話框中使用什麼? –

+0

如果一切順利,我們將requestCode設置爲1,那麼RESULT_OK將爲1,因此在activityResult上我們可以檢查是否(requestCode == RESULT_OK)。 對於設置結果,我們在自定義對話框活動中使用了setResult。我們可以將上面提到的一些數據與鍵值對進行比較。 要獲取onActivityResult中的數據,請使用該密鑰名稱來檢索其值。 –

3
+0

感謝您的快速回復。我已經通過了developer.android.com的例子。但我發現它很混亂。你能否給我舉一個參考主要活動和其他活動的例子。我是一名初學者。 –

+1

閱讀此內容---- http://learnandroideasily.blogspot.in/2013/03/starting-activity-for-result-in-android.html http://android-er.blogspot.in/2011/08 /return-result-to-onactivityresult.html – vinay

0

啓動活動:

你需要一個額外的整數參數傳遞給startActivityForResult()method.You可以做到這一點通過定義一個常量或簡單地放一個整數。integer參數是一個「請求代碼」,用於標識您的請求。當您收到結果Intent時,回調會提供相同的請求代碼,以便您的應用程序可以正確識別結果並確定如何處理結果。

static final int ASK_QUESTION_REQUEST = 1; 
// Create an Intent to start SecondActivity 
Intent askIntent = new Intent(FirstActivity.this, SecondActivity.class); 

// Start SecondActivity with the request code 
startActivityForResult(askIntent, ASK_QUESTION_REQUEST); 

返回結果:

在完成第二個活動類的工作簡單地設置的結果,並呼籲該活動來自何方,最後不要忘了寫完成()語句後。

// Add the required data to be returned to the FirstActivity 
      sendIntent.putExtra(Result_DATA, "Your Data"); 

      // Set the resultCode to Activity.RESULT_OK to 
      // indicate a success and attach the Intent 
      // which contains our result data 
      setResult(RESULT_OK, sendIntent); 

      // With finish() we close the SecondActivity to 
      // return to FirstActivity 
      finish(); 

接收結果:

當你與後續活動並返回完成後,系統會調用您的活動的onActivityResult()方法。此方法包含三個參數:

@您傳遞給startActivityForResult()的請求代碼。 @第二活動指定的結果代碼。如果操作成功,則爲RESULT_OK;如果操作失敗,則爲RESULT_CANCELED @An攜帶結果數據的Intent。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    // check if the request code is same as what is passed here it is 1 
    if (requestCode == ASK_QUESTION_REQUEST) { 
     // Make sure the request was successful 
     if (resultCode == RESULT_OK) { 
      final String result = data.getStringExtra(SecondActivity.Result_DATA); 

      // Use the data - in this case display it in a Toast. 
      Toast.makeText(this, "Result: " + result, Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

欲瞭解更多詳細信息,請參閱該示範Getting a Result from An Activity

0

1.In您FirstActivity類寫入以下使用意圖遷移到第二個活動代碼。

Intent i = new Intent(this, SecondActivity.class); 
startActivityForResult(i, 100); 

2.In您secondActivity類寫入以下爲onclick事件 代碼對於例如:在secondActivity如果要發回數據:

Intent intent= new Intent(); 
intent.putExtra("result",result); 
setResult(RESULT_OK,intent); 
finish(); 

3.Now在FirstActivity類寫入以下代碼用於onActivityResult()方法。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if (requestCode == 100 && resultCode == Activity.RESULT_OK){ 
      String result=data.getStringExtra("result"); 
      Log.e("Result",result); 
    } 
}