活動所以我有活動A,B和C導航高達依賴於意圖的額外數據
A開始B,並將其傳遞它無法通過意向的羣衆演員不發揮作用的關鍵數據。 B啓動C,然後C完成並通過NavUtils.navigateUpFromSameTask(this)進行導航。這會導致B以空的意圖重新啓動並且沒有保存的狀態,這會導致我的應用程序崩潰。
當我向上導航時,仍然擁有B所需的數據的最佳方式是什麼?
活動所以我有活動A,B和C導航高達依賴於意圖的額外數據
A開始B,並將其傳遞它無法通過意向的羣衆演員不發揮作用的關鍵數據。 B啓動C,然後C完成並通過NavUtils.navigateUpFromSameTask(this)進行導航。這會導致B以空的意圖重新啓動並且沒有保存的狀態,這會導致我的應用程序崩潰。
當我向上導航時,仍然擁有B所需的數據的最佳方式是什麼?
這是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在這種情況下)
另一種方法是使用SharedPreferences,它將無條件地幫助您,並將您需要的信息存儲在您想要存儲的位置。
http://www.tutorialspoint.com/android/android_shared_preferences.htm
我想你寫的解決方案閒逛,雖然它的作品,好像它的工作原理的原因是因爲startActivityForResult的不是,而是因爲活動C與呼叫關閉完成()而不是navigateUpFromSameTask()。我改變了所有的導航調用完成,它似乎工作正常,沒有改變任何東西......我想知道是否應該這樣做,如果是這樣,爲什麼navigateUpFromSameTask存在。 – leetrobot
它的工作原因是setResult –
在android中沒有人理解的方法,如果你閱讀android代碼,你會看到像「方法什麼也不做」的評論,或者「爲了這個方法的工作,你還需要調用...」 –