Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發技巧之viewstub用法詳解及實現延遲加載

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

編輯:關於Android編程

這一篇是接著上面的include標簽的例子來講的,地址http://blog.csdn.net/jason0539/article/details/26131831

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

"

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

"

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

上代碼了,看完就理解了

acitivity_main.xml



    

    


    


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

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

pic_view.xml




    
    


裡面只放了一張圖片

MainActivity.java

public class MainActivity extends Activity {
	private ViewStub pic_sub;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		pic_sub = (ViewStub) findViewById(R.id.pic_stub);
		new Timer().schedule(new TimerTask() {

			@Override
			public void run() {
				handler.sendEmptyMessage(1);
			}
		}, 1000);// 延遲1秒,然後加載
	}

	Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			View pic_view = pic_sub.inflate();// ①
			//pic_sub.setVisibility(View.VISIBLE);// ②
			ImageView iv_pic = (ImageView) pic_view.findViewById(R.id.iv_pic);
			iv_pic.setImageResource(R.drawable.pic);
			View view = findViewById(R.id.pic_stub);//③
			view = findViewById(R.id.pic_view_id_after_inflate);//④
		};
	};
}

①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

微博:http://weibo.com/2553717707

博客:http://blog.csdn.net/jason0539(轉載請說明出處)

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved