這一篇是接着上面的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
微網誌:
部落格:(轉載請說明出處)