我有3類甲,乙和Ç。的Android的onCreate()和的onResume()的查詢
我把一些對象從A改爲B。在B,在onCreate()
,我從意圖中拉出這些,並保留它們作爲類變量。現在活動B允許用戶編輯這些對象。這通過startActivityForResult()
通過將對象從B傳遞到C而發生。
現在,當用戶正與編輯完成後,Ç與修改的對象,並且結束沿通過的結果INT回乙。現在當我回到B,在onActivityResult()
,我拉出這些對象,並更新相應的類變量。但onCreate()
再次調用,類恢復到那個一個送給乙而不是保持該Ç送給乙的那些對象。
現在,如果使得onCreate()
的B每次都訪問數據庫,並且顯然它工作正常。但它看起來很浪費。
那麼,我該如何處理這種情況呢?如果onCreate()
無論如何將被稱爲,似乎onResume()
,startActivityForResult()
和onActivityResult()
是沒用的,我不妨將所有的代碼在onCreate()
。
請指教!
下面是將用戶從乙到Ç
public void goToC(View v) {
Intent intent = new Intent(this, C.class);
intent.putExtra("STUFF", stuff);
startActivityForResult(intent, 1);
}
下面是代碼中Ç其將數據傳遞迴乙
long rowsUpdated = myModel.updateStuff(this, stuff);
if (rowsUpdated == 1) {
Intent intent = new Intent(this, B.class);
// put the data in the intent
intent.putExtra("STUFF", stuff);
// set the flags to reuse B
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
// set result code to notify the ItemEntriesActivity
setResult(1, intent);
// finish the current activity i.e. C
finish();
}
代碼這裏是B中的代碼,它接收上面的da TA
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (intent != null) {
switch (resultCode) {
case 1:
// Update the class variable, so that onResume() gets the updated value
stuff = intent.getExtras().getParcelable("STUFF");
break;
default:
break;
}
}
}
正如我所說的,這個代碼工作正常,但由於B.onCreate()
被在此之後執行,活動B再次使用的舊值結束。
更新:我試圖從Ç回去時乙使用intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP)
。這仍然不起作用。我在電話finish()
。任何建議表示讚賞!
更新2:當我在乙把一個調試點在onStop()
,它是越來越只要我切換到Ç調用。難怪B中的onCreate()
將被調用。現在我的問題是爲什麼onStop()
被調用。我在C做的唯一'非自然'的事情是使用getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
來顯示沒有鍵盤的TextEdits。所以我試着將android:configChanges="keyboard|keyboardHidden"
加入到Manifest的活動中,沒有任何區別。再次,任何建議表示讚賞。
當必須(重新)創建活動並且無法阻止該活動發生時調用'onCreate'。最初的意圖是有用的,所以你有兩種不同的意圖,你必須以不覆蓋它的方式進行管理。 – zapl
將修改後的變量寫入意圖(或以其他方式保存)。然後檢查修改後的值,並在OnCreate中代替默認值加載它們。 – NameSpace
當我在** B **中執行'getIntent()'時,我總是得到我從A發送的那個。這是因爲我在** C **中調用了'finish()'而不是'startActivity()' 。那麼我應該繼續並刪除'onResume()','onActivityResult()'等,等等? – rgamber