2012-03-13 55 views
7

我有3個活動 - 一個,並Ç活動開始startActivityForResult()沒有返回調用活動

簡而言之,活動A啓動活動B,然後A也啓動活動C並期待C的結果,但從未得到它。

這裏是應用程序的工作流程:

  1. 活性A被應用程序啓動時啓動,並開始在活動的onCreate B(不是結果,只是startActivity())。

    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        startActivity(new Intent(getApplicationContext(), ActivityB.class)); 
    } 
    
  2. 活動A然後也使用startActivityForResult()開始活動Ç後面代碼,此時爲結果,與活動A還具有onActivityResult。

    Intent intent = new Intent(getApplicationContext(), ActivityC.class); 
    startActivityForResult(intent, 0); 
    

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
        ... 
    } 
    
  3. 活動C使用的setResult(),並完成()返回一些數據,它應該回到活動A,因爲活動一個名爲startActivityForResult()。

    Intent intent = new Intent(); 
    intent.putExtra("encryption", encryption); 
    setResult(56, intent); 
    finish(); 
    

BUT工作流落在步驟3無聲 - 活動A的onActivityResult不會被調用(既不是B的對這個問題),即使活動A是一個開始下的結果。不確定活動B是否妨礙了A和C的溝通,或者問題是什麼。任何幫助深表感謝。

+2

其所以很難理解....活動B然後使用活動A進行Web服務調用,如果活動A確定需要登錄,則會啓動活動C – 2012-03-13 17:38:14

+0

編輯問題以簡化它。基本上活動A開始活動B,然後A也開始活動C並希望得到C的結果,但從未得到它。 – Gady 2012-03-13 17:51:33

+0

startActivityforresult進來B活動它的工作從哪個活動開始並返回onactivity結果 – 2012-03-13 17:53:08

回答

20

我從來沒有能夠得到這個工作,所以我最終使用Handler來返回數據到必要的Activity。

UPDATE:再次遇到這個問題後,我發現真正的原因不起作用是因爲我有清單中調用/接收活動A的android:noHistory="true"。刪除android:noHistory="true"修復它,但如果你需要它是真實的,那麼處理程序是一個很好的解決方法。

+0

謝謝!我無法弄清楚爲什麼onActivityResult沒有被調用,這就是原因。我登錄了Android文檔問題https://code.google.com/p/android/issues/detail?id=68137。 – Vicki 2014-04-04 09:12:07

+0

@Vicki 13個月後,這個問題仍然指出「新」。不知何故,Android在太多領域吸引人。文檔當然是其中之一。 – sstn 2015-05-07 07:21:37

1

我不認爲你應該在意圖中使用getApplicationContext()

來自開發人員網站。

getApplicationContext() 
Return the context of the single, global Application object of the current process. 

當你startActivityForResult()它試圖返回的意圖,你所提供的全球應用程序上下文中指定的活動。

如果你有一個ActivityB那麼你應該稱呼它

Intent intent = new Intent(ActivityB.this, ActivityC.class); 
startActivityForResult(intent, 0); 

然後,它會嘗試當ActivityC完成返回ActivityB。

+0

我認爲結果返回的活動是活動稱爲startActivityForResult(),而不是創建Intent時指定的上下文。無論如何,根據您的指定更改它仍然不會將結果返回到onActivityResult。 – Gady 2012-03-13 18:23:13

+0

澄清,如果從ActivityB調用最後兩行代碼。 ActivityC啓動後返回到ActivityB,它不會更多地回答您的原始問題,以說明創建意圖時使用的正確參數。也許在開始活動的地方添加更完整的代碼示例可能會有所幫助。 – triggs 2012-03-13 20:07:18

+0

在我的場景中,最後2行代碼是從活動A調用的,這是我希望返回結果的地方。但這並沒有發生,我唯一可以確定的是,因爲活動A也首先啓動活動B. – Gady 2012-03-13 20:11:12

-2

您也許這個給一試:

if (getParent() == null) { 
setResult(RESULT_OK, dataTobePassback); 
} else { 
getParent().setResult(RESULT_OK, dataTobePassback); 
} 

dataTobePassback是一個Intent攜帶的東西,你可能需要傳遞迴調用活動

+0

知道爲什麼/如何工作會很有意思。 – sstn 2015-05-07 07:24:14