2013-10-07 90 views
10

所以我有一個活動A和一個活動B.我希望活動A能夠通過按下按鈕導航到活動B.這很有效,但是當我使用向上導航(操作欄中的主頁按鈕)導航回到活動A時,onCreate()會再次被調用,並且用戶輸入的舊信息會丟失。onCreate被稱爲活動A在向上導航

我見過:onCreate always called if navigating back with intent,但他們使用片段,我希望不必重新設計整個應用程序來使用片段。每當活動A再次變爲活動狀態時,是否有任何方法可以阻止onCreate()被調用?

+0

向上導航應該能夠在不調用'onCreate()'的情況下從ActivityB返回到ActivityA。你一定在做些時髦的事情。請發佈您正在使用的代碼來執行此操作。另外,當ActivityB運行時,您確定ActivityA尚未完成嗎? –

回答

12

這種行爲是完全正常的,並希望。 系統可能決定停止在後臺的Activities以釋放一些內存。 同樣的事情發生時,例如,旋轉設備。

通常情況下,當您重新創建Activity時,您將實例狀態(如輸入的文本和內容)保存到包中,並從包中獲取這些值。

下面是一些標準的代碼,我使用:

private EditText mSomeUserInput; 
private int mSomeExampleField; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // TODO inflate layout and stuff 
    mSomeUserInput = (EditText) findViewById(R.id.some_view_id); 

    if (savedInstanceState == null) { 
     // TODO instanciate default values 
     mSomeExampleField = 42; 
    } else { 
     // TODO read instance state from savedInstanceState 
     // and set values to views and private fields 
     mSomeUserInput.setText(savedInstanceState.getString("mSomeUserInput")); 
     mSomeExampleField = savedInstanceState.getInt("mSomeExampleField"); 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    // TODO save your instance to outState 
    outState.putString("mSomeUserInput", mSomeUserInput.getText().toString()); 
    outState.putInt("mSomeExampleField", mSomeExampleField); 
} 
+1

這是一個非常好的解決方案!我不知道這是捆綁包的用途,但我會找到一種方法來使用它們來存儲用戶的信息。非常感謝! –

+0

非常好奇。爲Android開發3年我還沒有結束這種簡單的Android行爲。這是因爲玩意圖有時可能會非常棘手:-) – cesards

+2

有沒有辦法在使用UP導航從B返回到Activity A時執行onCreate?我實際上是通過網絡調用來獲取數據,並且再次執行它需要更多時間。 –

12

您可以向上按鈕行爲像逼人退,通過重寫onSupportNavigateUp()

@Override 
public boolean onSupportNavigateUp() { 
    onBackPressed(); 
    return true; 
} 
+0

有一個原因,爲什麼android有向上和向後的按鈕。引用來自:http://developer.android.com/training/implementing-navigation/temporal.html 「後退導航是用戶向前瀏覽他們以前訪問過的屏幕的歷史記錄。所有Android設備都爲此類型提供了一個」返回「按鈕**,所以你的應用程序不應該添加一個返回按鈕到用戶界面。**「 –

0

如果您想從孩子到家長無導航重新創建父級(調用onCreate方法),您可以在您的父級活動中設置android:launchMode="singleTop"屬性AndroidManifest.xml