0

我正在開發一個應用程序,在該應用程序中我使用一些數據構建了一個treeView。由於這個過程相當長,我希望能夠以某種方式保存我構建的treeView(一個LinearLayout),以便在調用活動時進行恢復。在包中添加一個LinearLayout

讓我們用樹視圖T調用我的活動。我有Home-> T-> Resource並從Resource返回Home。我在T中實現了onSaveInstance,這樣我就可以在資源包中保存我需要的變量,當我從Resource返回Home並且T被銷燬時,但問題是我無法將所有linearLayout保存爲一個monolitic信息捆綁,LinearLayout似乎不是可以分類的。

所以總結一下我的週期是:

Home-->T-->Resouce-->Home (T is destroyed and onSaveInstance is executed)-->T (I want to avoid the rebuilding of the LinearLayout). 

許多thnaks

回答

4

不要這樣做。當您創建任何視圖,佈局或其他方式時,它會使用充氣活動的上下文來獲取和使用系統資源和內部應用程序資源。當你的Activity被銷燬時,這個上下文不再有效。

如果您確實設法保存並加載LinearLayout,您將會收到大量泄露的窗口和其他崩潰,包括NullPointerExceptions和Dead Objects。

如果Activity被銷燬並重新啓動,您應該始終讓Android爲Activity重新創建佈局。

0

爲什麼不把'treeview T'的資源元素保存在一些有序的數據結構中,比如ArrayList,HashMap等......將這個數據結構保存到SharedPreference/Bundle等......在構建活動視圖時,通過讀取先前保存的SharedPreference/Bundle中的元素來動態創建LinearLayout。

/* Posting an example code below */ 

LinearLayout linLayout = new LinearLayout(this); 

View childView = null; // read this childView in a sequential manner from the sharedPreference/Bundle 

linLayout.addView(childView); 
+0

我以遞歸方式構建treeview,其基本對象是類Resource R。您是說我應該只保存treeview T的「主父」R?如果是這樣,爲什麼一個arrayList只有一個元素? – 2013-04-11 07:06:34

+0

我提出的方法不涉及「基礎R」。事實上,你甚至不需要使用'R',因爲我們將動態創建活動屏幕。一旦我們的主視圖,即linLayout(如上面的代碼中對應於treeView T所提到的)被構建,而不是執行setContentView(R.XXX),您所做的只是setContentView(linLayout)。你可以參考http://stackoverflow.com/questions/4979212/programmatically-creating-a-relativelayout-in-android瞭解更多關於在an​​droid中創建佈局而不使用'R'或任何編譯時xml文件的信息。 – Sriram 2013-04-11 16:36:02

相關問題