2014-12-28 26 views
1

活動所以我有活動A,B和C導航高達依賴於意圖的額外數據

A開始B,並將其傳遞它無法通過意向的羣衆演員不發揮作用的關鍵數據。 B啓動C,然後C完成並通過NavUtils.navigateUpFromSameTask(this)進行導航。這會導致B以空的意圖重新啓動並且沒有保存的狀態,這會導致我的應用程序崩潰。

當我向上導航時,仍然擁有B所需的數據的最佳方式是什麼?

回答

1

這是startActivityForResult是爲

而是開始活動的C創建的,你開始下與startActivityForResult

當你使用C做,你寫

Intent returnData = new Intent(); 
returnData.putSomeExtras... 
setResult(Activity.RESULT_OK,returnData); 
finish(); 

這會導致B的活動onActivityResult被調用,並且您的額外內容在傳遞給此方法的Intent中

onActivity res ULT通常看起來像這樣

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

if(resultCode == Activity.RESULT_OK){ 
if(requestCode == REASON_I_STARTED_ACTIVITY_C){ 
//do something with data 

} 
} 

} 

,並開始你做這樣的事情

public static final int REASON_I_STARTED_ACTIVITY_C = 100; 

Intent startCIntent = new Intent(B.this,C.class); 
startActivityForResult(startCIntent,REASON_I_STARTED_ACTIVITY_C); 

*重要提示* onActivityResult調用之前,它是在執行活動的onResume活動(B在這種情況下)

+0

我想你寫的解決方案閒逛,雖然它的作品,好像它的工作原理的原因是因爲startActivityForResult的不是,而是因爲活動C與呼叫關閉完成()而不是navigateUpFromSameTask()。我改變了所有的導航調用完成,它似乎工作正常,沒有改變任何東西......我想知道是否應該這樣做,如果是這樣,爲什麼navigateUpFromSameTask存在。 – leetrobot

+0

它的工作原因是setResult –

+0

在android中沒有人理解的方法,如果你閱讀android代碼,你會看到像「方法什麼也不做」的評論,或者「爲了這個方法的工作,你還需要調用...」 –