饒榮慶 -- 您今天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é)合使用的話
          比如在下面的代碼中就會(huì)拋出異常

          UIThread implements Runnable{
          public void run(){
            invalidate();
            }
          }
          上面的代碼會(huì)拋出Only the original thread that created a view hierarchy can touch its views。
          怎么樣解決上面的問題呢,如果你有兩個(gè)View,你需要一個(gè)View用來顯示當(dāng)前的狀態(tài),一個(gè)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(); //更新視圖
                              }
                          };
                     
          }
          你必須實(shí)現(xiàn)一個(gè)Handler.然后再你下載數(shù)據(jù)的線程中放上一個(gè)mHandler.post(mUpdateResults);這樣就可以了。

          第2中方案比較簡單

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

            Handler mHandler = new Handler(){
                  @Override
                  public void handleMessage(Message msg) {
                      super.handleMessage(msg);
                      // 這里處理視圖需要更新的代碼。
                             
                  }
             };
            
             總結(jié),發(fā)現(xiàn)Google Android 好像有點(diǎn)弱智了。Api這么難用,不如J2ME簡單啊。
            
            
           對于postInvalidate用法來說就相對簡單點(diǎn)了直接調(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)航:
           
          主站蜘蛛池模板: 东海县| 丰台区| 昌邑市| 贵州省| 沾化县| 景洪市| 石棉县| 诏安县| 宾阳县| 报价| 河东区| 平江县| 宜川县| 收藏| 山西省| 万荣县| 塔河县| 安泽县| 丰台区| 大埔区| 竹北市| 银川市| 六枝特区| 阿图什市| 余干县| 克山县| 石楼县| 巴中市| 余姚市| 岳池县| 苍梧县| 多伦县| 鄂托克前旗| 抚远县| 三亚市| 家居| 缙云县| 桂平市| 榕江县| 蒲城县| 北京市|