2012-11-20 28 views
1

嗨,
我有一些微調對象,當選中時,更改EditText和一個按鈕的內容。所有工作正常,直到我打開和關閉屏幕。
我使應用程序的方向僅限於橫向,因此打開和關閉屏幕會導致活動被破壞。在恢復應用程序狀態後,不需要的onItemSelected調用

這裏發生的問題是我失去了Spinner,EditText和Button對象的所有狀態信息。
所以我試圖用onSaveInstanceStateonRestoreInstanceState方法來解決這個問題,方法是按順序設置Spinner,Button和EditText的狀態。
問題在於,由於某種原因,我在恢復Button和EditText的狀態後調用了onItemSelected方法,因此它們被設置爲其默認值。
我試着暫時禁用onItemSelected偵聽器,但只要我再次啓用它們,就會調用onItemSelected方法並重置Button和EditText狀態。

注意:我只想恢復應用程序被系統而不是用戶終止後的狀態。

回答

0

您可以創建一個全局布爾變量,並在還原時將其設置爲true。在onItemSelected中,你可以檢查這個變量,如果它是真的,你不會改變button和editText的內容,只需將這個變量設置爲false即可。 在onRestoreInstaceState:

wasRestored = true; 

在onItemSelected:

if(wasRestored){ 
    wasRestored=false; 
    return; 
} else {//change editText and Button content} 
+0

我通過在onRestoreInstanceState方法開始其設置爲true,並在年底將其設置爲false嘗試這個。這雖然不起作用,但是當我沒有將它設置回false時,它確實有效,但我的Spinner顯然不再工作。所以從我的角度來看,onItemSelected方法似乎是在onRestoreInstanceState方法之後調用的,我不知道在哪裏/爲什麼。 – user1219263

+0

你應該嘗試在onItemSelected而不是onRestoreInstanceState中將其設置爲false。如果(變量){變量=假;返回;} - 這樣的事情。 – jumper0k

+0

好的,我糾正了它,但我仍然有問題。所以我試圖找出一些日誌記錄會發生什麼。下面的方法是在重啓屏幕時調用的,沒有你的建議:onCreate - init(Spinner,Button和EditText被初始化) - onRestoreInstanceState - onItemSelected - onItemSelected。通過添加全局布爾值,第一個onItemSelected調用消失,但仍然以某種方式調用了ItemSelected中的某處。 – user1219263

相關問題