饒榮慶 -- 您今天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  回復  更多評論
            


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


          網站導航:
           
          主站蜘蛛池模板: 琼中| 塔河县| 台中县| 乌兰县| 东辽县| 莒南县| 合江县| 琼结县| 息烽县| 湖南省| 阳信县| 正定县| 孝感市| 铜陵市| 吴忠市| 宜昌市| 积石山| 信宜市| 神木县| 新安县| 镇安县| 化德县| 奉节县| 巍山| 辽阳县| 永兴县| 当阳市| 四会市| 开江县| 陆良县| 芒康县| 岳池县| 东源县| 泗水县| 昭平县| 漳州市| 托克托县| 大荔县| 栖霞市| 锡林浩特市| 奉节县|