編輯:關於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(轉載請說明出處)
遇到一個問題:昨天模擬器工作還正常,今天eclipse就識別不了了。後來發現是360手機助手占用了5555端口造成的,我就納悶了,平時這個也不是自動啟動,今天就啟動了。廢
本文實例講述了Android控件之Spinner用法。分享給大家供大家參考。具體如下:以下模擬下拉列表的用法布局文件:<?xml version=1.0 e
之前寫過Fragment使用的程序,Fragment可以靜態,也可以動態載入內存中的,這一章進一步看看如何動態地更換Fragment和看看Fragment生命期都有什麼函
其實最早接觸OpenCV是很久很久之前的事了,大概在2013年的5,6月份,當時還是個菜逼(雖然現在也是個菜逼),在那一段時間,學了一段時間的android(並不算學,一