[英]Android onCreate() and onResume() query
我有A , B和C三班。
我將一些物體從A傳遞到B。 在B的onCreate()
,我將它們從意圖中拉出,並將其保留為類變量。 現在,活動B允許用戶編輯那些對象。 這是通過將對象從B傳遞到C通過startActivityForResult()
發生的。
現在,當用戶完成編輯后, C會將結果int與修改的對象一起傳遞回B並完成。 現在,當我回到B時 ,在onActivityResult()
,將這些對象拉出,並更新相應的類變量。 但是onCreate()
再次被調用,並且該類恢復為A給B的對象,而不是保留C給B的對象 。
現在,使B的 onCreate()
每次都訪問數據庫,顯然可以正常工作。 但這似乎很浪費。
那么,我該如何處理這種情況? 如果無論如何都要調用onCreate()
,似乎onResume()
, startActivityForResult()
和onActivityResult()
都是無用的,我不妨將所有代碼都放在onCreate()
。
請指教!
這是將用戶從B轉到C的代碼
public void goToC(View v) {
Intent intent = new Intent(this, C.class);
intent.putExtra("STUFF", stuff);
startActivityForResult(intent, 1);
}
這是C中將數據傳遞回B的代碼
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中接收上述數據的代碼
@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再次使用舊值結束。
更新 :我嘗試從C返回到B時使用intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP)
。 這仍然行不通。 我在B的任何地方都沒有打電話給finish()
。 任何建議表示贊賞!!!
更新2 :當我在B中的onStop()
中放置一個調試點時,切換到C就會立即調用它。 難怪B中的onCreate()
會被調用。 現在我的問題是為什么要調用onStop()
。 我在C語言中所做的唯一“不自然”操作是使用getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
在沒有鍵盤的情況下顯示TextEdits getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
。 因此,我嘗試將android:configChanges="keyboard|keyboardHidden"
到清單中的活動中,沒有區別。 再次,任何建議表示贊賞。
您正在創建與Intent
Intent intent = new Intent(this, B.class);
此構造函數將創建B
另一個實例,該實例確實將調用onCreate()
。 您應該使用一個空的構造函數
Intent intent = new Intent();
// set result code to notify the ItemEntriesActivity
setResult(1, intent);
// finish the current activity i.e. C
finish();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.