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