2013-03-20 42 views
18

我正在使用setContentView(R.layout.main)切換同一活動中的視圖。我正在調用一些異步任務並在主佈局文件中填充數據,然後通過調用setContentView(R.layout.main)方法更改視圖。更改同一活動中的佈局文件

我開始知道,我們不應該多次使用setContentView方法進行同樣的活動。雖然它對我來說工作得很好。

任何人都可以解釋爲什麼我們不應該使用setContentView方法多次同一活動來改變視圖?

它會創建任何與內存相關的異常嗎?有人可以澄清嗎?

+0

不是我知道它會導致任何異常。 (除了OutOfMemory異常外,如果你在系統內存不足的情況下這樣做)。讓我們聽聽其他人的說法。 – Calvin 2013-03-20 09:35:01

+0

相關:http://stackoverflow.com/q/6811989/783284 – Cody 2013-03-20 09:41:10

回答

2

我想交換意見是不是一個好主意,因爲Android平臺已經擁有了強大的框架來處理在視圖之間並保持與該活動相關聯的每個視圖的狀態過渡的始終是更好地與現有的框架,堅持,而不是想到一些複雜的實施,你必須經歷所有這些事情。如果在應用程序中不需要這些東西,並且只有在整個應用程序中只有兩個或三個屏幕,則可以嘗試切換視圖。即使你的視圖是如何構建的,如果你有複雜的邏輯和創建這些視圖所需的大量數據,這不會是一個很好的方法。更多的事情,如果你添加更多的視圖,說你的應用程序的功能負載需要處理的活動會走高。在這種情況下,您將聲明並初始化該特定活動中的所有視圖,以便維護所有這些視圖實例非常重要。如果你想了解更多關於活動和任務的信息,請親切點擊refer this link

+3

換句話說,改變視圖可能意味着你也改變了一些邏輯,因此,一個新的活動更適合。 – adrianp 2013-03-20 09:45:50

+0

我想知道更改視圖後分配給以前的視圖的內存將被釋放或不.and另外一件事情,這個過程將導致任何內存異常。可以澄清這兩個問題。因爲我使用setContentView方法來更改觀點。 – 2013-03-20 09:47:01

+0

你會得到內存異常嗎? – Neil 2013-03-20 09:49:04

0

那麼每次你調用setContentView()時,你都必須再次找到所有的佈局,除此之外,我認爲你可以「做」它。但正如討論here這是虐待勸告,因爲它明顯違背了android準則。另外Commonsware有一些非常重要的點here其中最重要的一點是,當你忘記從視圖中清理東西等時,你會容易泄漏內存,而Android通常會爲你處理這些東西。

總之你應該遵循Android指南和使用Fragments或開始新的Activity

0

按照developer docs的setContentView(INT layoutResID)用於

設置從佈局資源的活動內容。資源將被誇大,將所有頂級視圖添加到活動中。

在最佳實踐中,此方法用於在啓動時膨脹Activity佈局。這並不意味着如果您繼續使用這種方法,將來會導致問題。要在this問題

的的setContentView引述回答你的活動實際上是調用由活動,這本身並不僅僅是充氣佈局更大量使用的窗口中的setContentView。

我建議你找一個替代的方式來切換佈局就像使用與Fragments一個ViewPager或一些其他的Tab鍵的方法,但最終這一切都歸結到你想要做什麼。

This問題也可能會給你你正在尋找什麼。