2010-10-01 57 views
17

所以我可以在運行時給一個ViewStub充氣。比方說,我想讓它消失,然後再膨脹,這取決於發生的某些事件(例如,根據用戶在屏幕上選擇的內容膨脹和縮小的工具欄)。如何「放氣」一個ViewStub?

我可以使用View.setVisibility(View.GONE)....有沒有其他方法?

或者我在這裏做錯了什麼?

謝謝! :)

+0

'setVisibility(View.GONE)'有點更具描述性。 – st0le 2010-10-01 19:25:37

+0

謝謝....編輯它 – Sid 2010-10-01 19:42:26

+0

什麼不喜歡View.GONE? – 2010-10-01 20:20:57

回答

33

充氣佈局可能會很昂貴,特別是在較舊的設備上。可以將ViewStub看作更多的視圖子樹的延遲加載機制,它可能會也可能不會被展開,而不是在運行時換出視圖層次結構的各個部分。一旦膨脹,交換VISIBLE/GONE之間沒有任何問題。 GONE將使框架在昂貴的遍歷期間跳過該子樹。

只要您不需要充氣視圖使用的內存,就是如此。設置GONE的可見性不會釋放任何內存;它只會將視圖標記爲佈局和繪圖目的。要釋放viewstub的充氣視圖的內存,您實際上必須移除充氣的視圖並將其替換爲新的視圖樁以備將來使用。

+0

hello @adamp我有一個疑問。如果我創建一個簡單的線性佈局並在其中動態添加一個子視圖,並且當我不需要它時,我會從線性佈局中刪除該子視圖,從而完全刪除子視圖。當你想要內存優化時,它是不錯的方法嗎?因爲一旦查看存根膨脹,我們不能刪除該視圖,只需將其刪除即可。 – KDeogharkar 2014-08-28 05:23:12

0

是的,你可以刪除任何你想要的.i我剛剛做完了。

ViewStub stub = findById(...); 
View v = stub.inflate(); 

並設置任何事件的視圖可見性。

v.setVisibility(View.GONE); 
+1

將可見性設置爲「通過」不會將其刪除,它只是隱藏它。 – Pkmmte 2015-12-02 22:57:48