2011-06-28 39 views
2

我有一個應用程序,有三個頁面,其中之一是主頁。如果用戶轉到兩個子頁面之一,用戶可以輸入幾個我想保存的字段。我一直在研究onPause()和onSaveInstanceState()。我想我只是想對這兩者作出明確的解釋,如果onPause()更好,並且代碼的例子。這就是我爲onSaveInstanceState()所做的努力。什麼是我的需要,onPause()或onSaveInstanceState()更好?

protected void onSaveInstanceState(Bundle outState) { 
    // Save away the original text, so we still have it if the activity 
    // needs to be killed while paused. 

    outState.putDouble("quizPts",qpts); 
    outState.putDouble("quizV",qvalue); 
    outState.putDouble("tPts",tpts); 
    outState.putDouble("tValue", tvalue); 
    outState.putDouble("hPts", hpts); 

所以這就是我如何設置捆綁,通過給它一個ID和一個值。

public void onRestoreInstanceState(Bundle outState) { 
    super.onRestoreInstanceState(outState); 
    // Restore UI state from the savedInstanceState. 
    // This bundle has also been passed to onCreate. 
    qpts = outState.getDouble("quizPts"); 
    qvalue = outState.getDouble("quizV"); 
    tpts = outState.getDouble("tPts"); 
    tvalue = outState.getDouble("tValue"); 
    hpts = outState.getDouble("hPts"); 

這是我如何反駁它,問題是我不明白如何通過捆綁來恢復它。我正在設置我需要回到設置爲UI的變量的變量。活動框架採用的是護理:

任何意見將androider

回答

1

最好的選擇將是一個共享的偏好。 onpause旨在用於在應用程序因電話或其他事件而暫停時注意您的問題。但是,如果您使用共享首選項,則會爲您提供保存數據的方法,並在保存的值不可用時使用默認值將其恢復。這些數據將在用戶會話中持續存在(即使您的應用程序被終止)。但它不是,如果你打算保存比原始數據類型,如布爾以外的東西一個很好的選擇,詮釋等

看到http://developer.android.com/guide/topics/data/data-storage.html#pref

0

你並不需要通過自己周圍捆綁很大

感謝從一個初學者。使用onSaveInstanceState():如果你的Activity類被系統以任何理由銷燬,它將被調用,所以你應該罰款把你的邏輯放在那裏。無論活動是否被銷燬,如果您離開您的活動,則總是會調用。

我也會在你的onRestoreInstanceState添加一個檢查:

public void onRestoreInstanceState(Bundle outState) { 
    super.onRestoreInstanceState(outState); 
    // Restore UI state from the savedInstanceState. 
    // This bundle has also been passed to onCreate. 
    if(outState.containsKey("quizPts")) qpts = outState.getDouble("quizPts"); 
    if(outState.containsKey("quizV")) qvalue = outState.getDouble("quizV"); 
    if(outState.containsKey("tPts")) tpts = outState.getDouble("tPts"); 
    if(outState.containsKey("tValue")) tvalue = outState.getDouble("tValue"); 
    if(outState.containsKey("hPts")) hpts = outState.getDouble("hPts"); 
+0

所以如果我不通過任何我需要的包是全球性的?如果我做onSaveInstanceState()是多餘的?我需要做兩個還是隻選一個? – zach

+0

Bundle是爲您提供的,與Android平臺調用該方法的方式相同。你根本不需要做任何事情。沒有全局變量,什麼也沒有。只需實現這兩種方法,它們將在需要時被調用。 – Femi

+0

Re「如果您的Activity類由於任何原因被系統調用而被銷燬」。不是因爲*任何原因,而是在OP的用例中,是的。無法依賴onSaveInstanceState獲取任何真正重要的信息。 – ToolmakerSteve

相關問題