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

          3G 手機(jī)開發(fā)網(wǎng)

             :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            99 Posts :: 1 Stories :: 219 Comments :: 0 Trackbacks
          原創(chuàng)文章轉(zhuǎn)載須留下
          http://www.3geye.net/?3/viewspace-2925 鏈接


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

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

          第一種解決方案是:
          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(); //更新視圖
                              }
                          };
                     
          }
          你必須實現(xiàn)一個Handler.然后再你下載數(shù)據(jù)的線程中放上一個mHandler.post(mUpdateResults);這樣就可以了。

          第2中方案比較簡單

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

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

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

          Feedback

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


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 龙井市| 巴彦淖尔市| 哈尔滨市| 武川县| 都昌县| 额敏县| 宁波市| 汾西县| 赤壁市| 铁力市| 桃源县| 河西区| 繁昌县| 海门市| 阿巴嘎旗| 内乡县| 乐安县| 平原县| 泗阳县| 盱眙县| 壶关县| 泊头市| 称多县| 平武县| 蓬溪县| 乃东县| 邵阳市| 松溪县| 蓝田县| 砀山县| 津南区| 赣州市| 犍为县| 大石桥市| 广汉市| 襄垣县| 云霄县| 红安县| 榆林市| 乌兰县| 巴楚县|