本篇博文主要討論一下複雜界面中經常使用的一種技術——界面延遲加載技術。java
有時候,咱們的頁面中可能會包含一些佈局,這些佈局默認是隱藏的,當用戶觸發了必定的操做以後,隱藏的佈局纔會顯示出來。好比,咱們有一個Activity用來顯示好友的列表,當用戶點擊Menu中的「導入」之後,在當前的Activity中才會顯示出一個導入好友的佈局界面。從需求的角度來講,這個導入功能,通常狀況下用戶是不使用的。即大部分時候,導入好友的佈局都不會顯示出來。這個時候,就可使用延遲加載的功能。android
ViewStub是一個隱藏的,不佔用內存空間的視圖對象,它能夠在運行時延遲加載佈局資源文件。當ViewStub被設置爲可見,或者調用inflate()函數時,纔會真的去加載這個佈局資源文件。該ViewStub在加載視圖時會在父容器中替換它自己。所以,ViewStub會一直存在於視圖中,直到調用setVisibility(int)或者inflate()爲止。ViewStub的佈局參數會隨着加載的視圖數一同被添加到ViewStub父容器。一樣,也能夠經過使用inflated Id屬性來定義或重命名要加載的視圖對象的Id值。web
請參考下面的代碼片斷。函數
<ViewStub android:id="@+id/stub_import" android:inflatedId="@+id/panel_import" android:layout="@layout/progress_overlay" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" />
經過「stub_import」這個id能夠找到被定義的ViewStub對象。加載佈局資源文件「progress_overlay」後,ViewStub對象從其父容器中移除。能夠經過「panel_import」這個id找到由佈局資源「progress_overlay」建立的View。佈局
執行加載佈局資源文件的推薦方式以下:ui
((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE); // 或者 View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
當inflate()被調用, 這個ViewStub被加載的視圖所替代,而且返回這個視圖對象。這使得應用程序不須要額外執行findViewById()來獲取加載視圖的引用。spa
經驗分享:.net 利用ViewStub能夠與xml文件裏面指定的佈局資源文件關聯起來,讓佈局資源文件在須要使用的時候再加載上去。何時用何時才加載,不用在開始啓動的時候一次加載。這樣作既能夠加快應用的啓動速度,又能夠節省內存資源。code |
---------------------------------------------------------------------------orm
http://blog.csdn.net/arui319
《Android應用開發精解》已出版,本文是初稿的部份內容。歡迎購買閱讀。
本文能夠轉載,可是請保留以上做者信息。
謝謝。
---------------------------------------------------------------------------