簡體   English   中英

Android onCreate()和onResume()查詢

[英]Android onCreate() and onResume() query

我有ABC三班。

我將一些物體從A傳遞到B。 BonCreate() ,我將它們從意圖中拉出,並將其保留為類變量。 現在,活動B允許用戶編輯那些對象。 這是通過將對象從B傳遞到C通過startActivityForResult()發生的。

現在,當用戶完成編輯后, C會將結果int與修改的對象一起傳遞回B並完成。 現在,當我回到B時 ,在onActivityResult() ,將這些對象拉出,並更新相應的類變量。 但是onCreate()再次被調用,並且該類恢復為AB的對象,而不是保留CB的對象

現在,使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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM