android ViewStub延時渲染的應用

來源:互聯網
上載者:User

標籤:

android開發當中,我們經常會遇到根據某個條件去控制一個控制項的顯示/隱藏的情況。雖然setVisibility(int visibility)的確可以達到這樣的目的,但是在渲染時,其實隱藏的布局也會執行inflate()方法,造成額外的資源開支(記憶體),針對這種情況更好的做法就是使用ViewStub這個對象。

根據官網上的描述,ViewStub是一個不可見的(invisible),不佔任何空間(zero-sized)的可以用來延時渲染的View對象。我們在布局中可以給他設定layout參數,指定想要替換的布局檔案。當我們調用ViewStub的inflate() 或者 setVisibility()方法時,ViewStub將被指定的layout所替代,並且新的view將繼承該ViewStub的布局參數。

簡單的樣本:

<ViewStub android:id="@+id/stub"               android:inflatedId="@+id/subTree"               android:layout="@layout/mySubTree"               android:layout_width="120dip"               android:layout_height="40dip" />

布局中,mySubTree就是我們想要延時渲染的視圖。在我們調用inflate()方法後,新渲染的視圖會繼承ViewStub的布局參數,即,mySubTree這個布局的實際寬高將分別是120dp和40dp。新渲染的視圖id將是我們指定的 subTree(對應上面布局中的inflatedId="@+id/subTree")


實際上也沒必要再去調用findViewById(int),官方推薦的做法是

 ViewStub stub = (ViewStub) findViewById(R.id.stub); View inflated = stub.inflate();

inflated就是我們新產生的視圖對象。

 

我們也可以通過setInlfateListener(ViewStub.onInflateListener listener)綁定監聽器, 在渲染完成時通過回調對該view進行一些操作。(比如顯示指定資料?)

 

  

 

android ViewStub延時渲染的應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.