在開發(fā)應(yīng)用程序的時候,經(jīng)常會遇到這樣的情況,會在運行時動態(tài)根據(jù)條件來決定顯示哪個View或某個布局。那么最通常的想法就是把可能用到的View都寫在上面,先把它們的可見性都設(shè)為View.GONE,然后在代碼中動態(tài)的更改它的可見性。這樣的做法的優(yōu)點是邏輯簡單而且控制起來比較靈活。但是它的缺點就是耗費資源。雖然把View的初始可見View.GONE但是在Inflate布局的時候View仍然會被Inflate,也就是說仍然會創(chuàng)建對象,會被實例化,會被設(shè)置屬性。也就是說,會耗費內(nèi)存等資源。
推薦的做法是使用Android.view.ViewStub,ViewStub是一個輕量級的View,占用資源非常小的控件。在Inflate布局的時候,只有ViewStub會被初始化,然后當ViewStub被設(shè)置為可見的時候(默認是不可見的),或是調(diào)用了ViewStub.inflate()的時候,ViewStub所向的布局就才會被Inflate和實例化。
但ViewStub也不是萬能的,下面總結(jié)下ViewStub能做的事兒和什么時候該用ViewStub,什么時候該用可見性的控制。
首先來說說ViewStub的一些特點:
(1) ViewStub只能Inflate一次,之后ViewStub對象會被置為空。按句話說,某個被ViewStub指定的布局被Inflate后,就不會夠再通過ViewStub來控制它了。