2012-12-25 33 views
2

我以編程方式創建一個RelativeLayout與其中的一些其他視圖,並將其添加到在XML中定義的父級。但是,在重新創建活動後,以編程方式創建的所有視圖(包括佈局)都會消失。我是否需要SharedPreferences對象來保存這些值,然後重新創建佈局,還是有更簡單的方法來保存它?android保存程序化創建視圖

P.S.所有新創建的視圖獲得分配一個ID

+0

他們是否在onCreate,onResume中創建? – CodeShane

+0

由於點擊按鈕而在onResume()中創建它們 – Droidman

+0

「我是否需要SharedPreferences對象來保存值」 - 當然是 - 或者其他一些持久性存儲方式。如果你的程序產生的東西不是*明確的*持久的,那麼它很容易丟失。 (除了[preference](http://developer.android.com/reference/android/preference/package-summary.html)API,其中包含透明地保留設置的代碼。) – JimmyB

回答

3

我需要一個SharedPreferences對象保存值,然後重新創建佈局

你說你在創建這些小部件。 onResume()中的代碼需要知道需要創建哪些小部件。如果這是純粹的瞬態信息,並且擔心由於屏幕旋轉或其他配置更改而導致活動被破壞和重新創建等事情,請在活動或片段上使用onSaveInstanceState()將有關這些小部件的數據從舊傳遞到活動的新實例。另一方面,如果您擔心幾個月後能夠重新創建這些視圖,則需要持續存儲此信息:SharedPreferences,數據庫,一些其他文件結構,「雲」等。

+0

我們如何存儲一個視圖在sharedprefs中以編程方式創建爲recyclerview? –

+0

@Kurlicue:你不「存儲視圖」。您存儲重新創建視圖所需的數據。 – CommonsWare

+0

所以我們存儲視圖的數據,我們如何保存視圖本身,而不是在onSaveInstanceState上? –

2

我建議你看看Activity.onSaveInstanceState(Bundle)

默認實現通過每個視圖調用的onSaveInstanceState()需要照顧大多數UI每個實例的狀態對你的在層次結構,其ID爲,並通過保存當前聚焦視圖的ID(所有這些都由onRestoreInstanceState()的默認實現恢復)。如果您重寫此方法以保存未被每個視圖捕獲的附加信息,那麼您可能希望通過默認實現[通過super.onSaveInstanceState()super.onRestoreInstanceState()]調用,否則應準備好保存每個視圖的所有狀態。

https://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)

以及我的答案在這裏:

How can I assign an ID to a view programmatically?