我有兩個活動:PictureList和AddPictures。從PictureList我請求活動的結果是這樣的活動:onActivityResult在返回後沒有得到正確的結果,因爲調用它的活動已重新創建?
Intent myIntent = new Intent(PictureList.this, AddPictures.class);
Bundle b = new Bundle();
b.putInt("iEntry", clickCounter);
b.putBoolean("bAddPicture", true);
b.putBoolean("bEditPicture", false);
myIntent.putExtras(b);
startActivityForResult(myIntent,1);
我也實施相應的onActivityResult這裏:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK){
iReturnedEntry = data.getIntExtra("iReturnedEntry", 0);
}
if (resultCode == RESULT_CANCELED) {
}
}
}
}
在其他活動,AddPictures,接收參數:
Bundle b = getIntent().getExtras();
iEntry = b.getInt("iEntry");
bAddPicture = b.getBoolean("bAddPicture", false);
bEditPicture = b.getBoolean("bEditPicture", false);
,當它返回它確實是這樣的:
Intent returnIntent = new Intent();
returnIntent.putExtra("iReturnedEntry", iEntry);
setResult(RESULT_OK,returnIntent);
通常情況下,應用程序可以正常工作,但通常會發生結果未被存儲。我認爲,由於某些內存管理或其他原因,PictureList活動正在重新創建,或者從活動AddPictures返回後再次調用onCreate方法,因此onActivityResult不起作用。我該如何解決這個問題?
感謝菲爾。我知道這些活動經常被創建和銷燬,並且應該使用onPause和onResume來處理,但是當您從一個活動調用startActivityForResult時會發生什麼,然後當您返回結果時重新創建該活動? onActivityResult在這種情況下如何工作? –
我發現了在重新調用活動的情況下onCreate()之前調用onActivityResult()的困難方式。因此,最安全的方法是簡單地將響應保存到onActivityResult()中的實例變量中,然後在onResume()中對其執行操作。由於onResume()會被調用,即使onCreate()不會在沒有任何條件邏輯的情況下滿足這兩種情況。當然,您需要清除實例變量作爲onResume()的最後一部分,以便下次再次使用時不會再使用它。 – Phil
我按照你的建議,但沒有奏效。在onActivityResult中,我保存了響應,並且還激活了一個布爾型標誌,稍後我在onResume中進行檢查。之後,標記爲真的標誌我加載了返回的值,但仍然是空的。 –