在開發(fā)應(yīng)用程序的時(shí)候,經(jīng)常會(huì)遇到這樣的情況,會(huì)在運(yùn)行時(shí)動(dòng)態(tài)根據(jù)條件來決定顯示哪個(gè)View或某個(gè)布局。那么最通常的想法就是把可能用到的View都寫在上面,先把它們的可見性都設(shè)為View.GONE,然后在代碼中動(dòng)態(tài)的更改它的可見性。這樣的做法的優(yōu)點(diǎn)是邏輯簡單而且控制起來比較靈活。但是它的缺點(diǎn)就是耗費(fèi)資源。雖然把View的初始可見View.GONE但是在Inflate布局的時(shí)候View仍然會(huì)被Inflate,也就是說仍然會(huì)創(chuàng)建對(duì)象,會(huì)被實(shí)例化,會(huì)被設(shè)置屬性。也就是說,會(huì)耗費(fèi)內(nèi)存等資源。

  推薦的做法是使用Android.view.ViewStub,ViewStub是一個(gè)輕量級(jí)的View,占用資源非常小的控件。在Inflate布局的時(shí)候,只有ViewStub會(huì)被初始化,然后當(dāng)ViewStub被設(shè)置為可見的時(shí)候(默認(rèn)是不可見的),或是調(diào)用了ViewStub.inflate()的時(shí)候,ViewStub所向的布局就才會(huì)被Inflate和實(shí)例化。

  但ViewStub也不是萬能的,下面總結(jié)下ViewStub能做的事兒和什么時(shí)候該用ViewStub,什么時(shí)候該用可見性的控制。

  首先來說說ViewStub的一些特點(diǎn):

      (1) ViewStub只能Inflate一次,之后ViewStub對(duì)象會(huì)被置為空。按句話說,某個(gè)被ViewStub指定的布局被Inflate后,就不會(huì)夠再通過ViewStub來控制它了。

網(wǎng)友評(píng)論