2011-10-10 80 views
0

我有具有2次的機器人應用,並且將它們用setContentView(R.layout.viewname);切換視圖後維護視圖狀態?

之間然而,當切換回先前的視圖,它似乎失去了所有的狀態從當我離開它偶爾切換。即EditTexts忘記他們的內容,按鈕忘記,如果他們被啓用或禁用等。

我該怎麼做,以防止這種情況?

+0

如何將兩個視圖置於相同的佈局,並打開和關閉可見性。它會給你相同的效果,除了狀態將被保存。 –

回答

4

這不是在Android中兩個「視圖」之間切換的推薦方式。

通常情況下,你在Activity.onCreate()調用setContentView()只有一次,指定包含所有你想用的視圖的佈局(當然你也可以添加更多的Views任何ViewGroups在佈局,在以後的時間)。引用文檔Activity

onCreate(Bundle)是您初始化您的活動的地方。最重要的是,在這裏您通常會使用定義UI的佈局資源調用setContentView(int),並使用findViewById(int)來檢索該UI中需要以編程方式進行交互的小部件。

您可以通過多種方式解決此問題,具體取決於您的特定應用程序要求以及「視圖」的含義。這裏有幾個:

  1. 把你的意見放在單獨的佈局,並讓他們成爲兩個單獨的活動的內容視圖。當您切換回前一個視圖時,這些字段中的數據將默認保存(不能繼續工作!)。

  2. 將所有視圖放入單個活動的一個佈局中。使用View.setVisibility(...)切換顯示和隱藏您希望在屏幕上顯示的視圖。隱藏的視圖將保持其狀態。

  3. 對每組視圖使用Fragment(如果您針對的是Honeycomb/3.0之前的應用程序,則需要Android compatibility library)。您可以使用FragmentManager開始FragmentTransaction來添加或刪除Fragment。被刪除的碎片仍然保持其狀態,並且一旦再次添加就會正確恢復。

如果你有一個自定義視圖中,可以確保它通過實現View.onSaveInstanceState()View.onRestoreInstanceState()保持其狀態。 Qberticus提供的answer是一個很好的參考。

0

將您的視圖保存到一個字段,然後加載該變量。因此,如果您的第一個內容視圖是 framelayout,請將其保存

FrameLayout layout1; //活動變量,保存到第一個視圖

然後當你再次加載它,而不是從XML加載它,從變量加載它: setContentview(layout1);

這應該保存狀態,只要活動在此期間沒有清除明顯。