2012-03-15 71 views
0

我試圖理解爲什麼會發生以下問題。 我有一個ImageView,我爲它設置了一個圖像,然後我爲它設置了一個onClickListener,所以當你點擊圖像時,它通過image01.setImageResource(R.drawable.newImage)更改圖像(到一個新圖像)。之後,我調用一個方法,我檢查一個條件,如果它是真的我再次將圖像更改爲默認的。 但我看不到變化,因爲它立即改變。我也插入一個睡眠,使其變慢。 (默認情況下,在XML代碼我設置好的形象,oldImage)onClick和setImagResource [Android] API 10

好吧...也許現在還不清楚..所以讓我們來看看代碼:

private void myMethod(){ 
     ImageView image01 = (ImageView) findViewById(R.id.image01); 
     image01.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
       //When you click on image it change! 
       image01.setImageResource(R.drawable.newImage); 
       checkImg(image01); 
       } 
     }); 
} 


private void checkGame(ImageView img){ 
     try{ 
      Thread.sleep(1000); 

      if(condition) 
       img.setImageResource(R.drawable.oldImage); 

     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
} 

我立刻看到了oldImage。有什麼問題? 有沒有可能在myMethod()中不應用視圖更改,直到其中的所有方法都會終止?

在此先感謝

回答

1

使用的Thread.sleep()方法,你實際上是使等待到主UI線程。主UI線程的方法不同步。請注意這一點。

請仔細閱讀developers.android網站,以便在看到您的有用代碼之前輕鬆使用線程。

private void myMethod(){ 
     ImageView image01 = (ImageView) findViewById(R.id.image01); 
     image01.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
       //When you click on image it change! 
       image01.setImageResource(R.drawable.newImage); 
       checkGame(image01); 
       } 
     }); 
} 


private void checkGame(ImageView img){ 
     try{ 
      // Thread.sleep(1000); 

      if(condition) 
     image01.postDelayed(new Runnable() {     
        @Override 
        public void run() { 
           image01.setImageResource(R.drawable.oldImage); 

} 
       }, 2000);    

     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
}