我有具有2次的機器人應用,並且將它們用setContentView(R.layout.viewname);
切換視圖後維護視圖狀態?
之間然而,當切換回先前的視圖,它似乎失去了所有的狀態從當我離開它偶爾切換。即EditTexts忘記他們的內容,按鈕忘記,如果他們被啓用或禁用等。
我該怎麼做,以防止這種情況?
我有具有2次的機器人應用,並且將它們用setContentView(R.layout.viewname);
切換視圖後維護視圖狀態?
之間然而,當切換回先前的視圖,它似乎失去了所有的狀態從當我離開它偶爾切換。即EditTexts忘記他們的內容,按鈕忘記,如果他們被啓用或禁用等。
我該怎麼做,以防止這種情況?
這不是在Android中兩個「視圖」之間切換的推薦方式。
通常情況下,你在Activity.onCreate()
調用setContentView()
只有一次,指定包含所有你想用的視圖的佈局(當然你也可以添加更多的Views
任何ViewGroups
在佈局,在以後的時間)。引用文檔Activity:
onCreate(Bundle)是您初始化您的活動的地方。最重要的是,在這裏您通常會使用定義UI的佈局資源調用setContentView(int),並使用findViewById(int)來檢索該UI中需要以編程方式進行交互的小部件。
您可以通過多種方式解決此問題,具體取決於您的特定應用程序要求以及「視圖」的含義。這裏有幾個:
把你的意見放在單獨的佈局,並讓他們成爲兩個單獨的活動的內容視圖。當您切換回前一個視圖時,這些字段中的數據將默認保存(不能繼續工作!)。
將所有視圖放入單個活動的一個佈局中。使用View.setVisibility(...)切換顯示和隱藏您希望在屏幕上顯示的視圖。隱藏的視圖將保持其狀態。
對每組視圖使用Fragment
(如果您針對的是Honeycomb/3.0之前的應用程序,則需要Android compatibility library)。您可以使用FragmentManager
開始FragmentTransaction
來添加或刪除Fragment
。被刪除的碎片仍然保持其狀態,並且一旦再次添加就會正確恢復。
如果你有一個自定義視圖中,可以確保它通過實現View.onSaveInstanceState()和View.onRestoreInstanceState()保持其狀態。 Qberticus提供的answer是一個很好的參考。
將您的視圖保存到一個字段,然後加載該變量。因此,如果您的第一個內容視圖是 framelayout,請將其保存
FrameLayout layout1; //活動變量,保存到第一個視圖
然後當你再次加載它,而不是從XML加載它,從變量加載它: setContentview(layout1);
這應該保存狀態,只要活動在此期間沒有清除明顯。
如何將兩個視圖置於相同的佈局,並打開和關閉可見性。它會給你相同的效果,除了狀態將被保存。 –