天天看點

Android開發技巧之viewstub用法詳解及實作延遲加載

這一篇是接着上面的include标簽的例子來講的,位址

上一篇的布局中間就用了viewstub這個控件,現在來說一下其作用和用法

"

 ViewStub 是一個不可見的,大小為0的View,最佳用途就是實作View的延遲加載,避免資源浪費,在需要的時候才加載View

需要注意的是,加載view之後,viewstub本身就會被新加載進來的view替換掉

上代碼了,看完就了解了

acitivity_main.xml

其中inflatedId就是新加載進來的view的id,如果需要擷取這個view,就要用這個inflatedId,原來的id已經被取代了

而layout就是要加載進來的布局,代碼如下

pic_view.xml

裡面隻放了一張圖檔

MainActivity.java

①inflate()被調用時, 被加載的視圖替代viewstub并且傳回自己的視圖對象。這使得應用程式不需要額外執行findViewById()來擷取所加載的視圖的引用

②句不需要,如果用到setvisibility的話,那麼①②兩句順序不可颠倒,否則報錯

java.lang.IllegalStateException:ViewStub must have a non-null ViewGroup viewParent,因為viewstub不能反複inflate,隻能inflate一次,setVisibility會間接調用inflate

①句 擷取到加載進來的pic_view,使得應用程式不需要額外執行findViewById()來擷取加載視圖的引用,如果要自己擷取的話,id要用inflateid

③句  這裡view将會是null,因為viewstub被替換掉,pic_stub的id已經不存在了

④句  用inflateid擷取到加載進來的view正常

作者:jason0539

微網誌:

部落格:(轉載請說明出處)