饒榮慶 -- 您今天UCWEB了嗎?--http://www.ucweb.com

          3G 手機開發網

             :: 首頁 :: 聯系 :: 聚合  :: 管理
            99 Posts :: 1 Stories :: 219 Comments :: 0 Trackbacks
          原創文章轉載須留下
          http://www.3geye.net/?3/viewspace-2925 鏈接


          根據Android SDK api文檔說明
          invalidate 方法是用來更新視圖(View)的方法,不過這東西的用法比較古怪
          invalidate 方法如果你直接在主線程中調用,是看不到任何更新的。
          如果跟線程結合使用的話
          比如在下面的代碼中就會拋出異常

          UIThread implements Runnable{
          public void run(){
            invalidate();
            }
          }
          上面的代碼會拋出Only the original thread that created a view hierarchy can touch its views。
          怎么樣解決上面的問題呢,如果你有兩個View,你需要一個View用來顯示當前的狀態,一個Thread去下載網絡數據
          或者是讀取文件等,這些數據讀取完畢后你要更新View到當前屏幕上怎么辦呢。看看下面的代碼,也許可以幫助你

          第一種解決方案是:
          class UIUpdateThread implements Runnable{

                      public void run() {
                          try {
                              Thread.sleep(1000*5);
                              mHandler.post(mUpdateResults);
                          } catch (InterruptedException e) {
                              e.printStackTrace();
                          }
                         
                      }
                     
                       final Handler mHandler = new Handler();
                          final Runnable mUpdateResults = new Runnable() {
                              public void run() {
                                  invalidate(); //更新視圖
                              }
                          };
                     
          }
          你必須實現一個Handler.然后再你下載數據的線程中放上一個mHandler.post(mUpdateResults);這樣就可以了。

          第2中方案比較簡單

          LoadDataThread implements Runnable{
          public void run(){
             doLoadData();
             mHandler.sendMessage(mHandler.obtainMessage()); //這里系統會自動調用handleMessage;這樣就可以更新視圖了
             }
          }

            Handler mHandler = new Handler(){
                  @Override
                  public void handleMessage(Message msg) {
                      super.handleMessage(msg);
                      // 這里處理視圖需要更新的代碼。
                             
                  }
             };
            
             總結,發現Google Android 好像有點弱智了。Api這么難用,不如J2ME簡單啊。
            
            
           對于postInvalidate用法來說就相對簡單點了直接調用就OK了,這里就不詳細說了。
            

          爬蟲工作室 -- 專業的手機軟件開發工作室
          3G視線 -- 專注手機軟件開發
          posted on 2008-03-05 16:13 3G工作室 閱讀(7202) 評論(1)  編輯  收藏

          Feedback

          # re: Android invalidate 與postInvalidate用法 2008-03-05 22:06 魔域私服
          http://www.zhaomysf.com.cn  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 牙克石市| 房山区| 科技| 两当县| 宁都县| 宝兴县| 赤峰市| 泰安市| 临湘市| 邳州市| 隆化县| 读书| 安顺市| 兴化市| 铜川市| 乐安县| 冀州市| 汉中市| 武穴市| 石嘴山市| 菏泽市| 黑水县| 慈溪市| 望城县| 炉霍县| 新宾| 宣武区| 衢州市| 威海市| 成武县| 临桂县| 武冈市| 文昌市| 曲松县| 武隆县| 合江县| 霍邱县| 石台县| 秀山| 万州区| 龙门县|