2012-03-15 11 views
0

なぜ私に次の問題が発生しているのか理解しようとしています。 私はImageViewを持っていて、それに画像をセットしてから、それにonClickListenerをセットアップしました。画像をクリックすると、image01.setImageResource(R.drawable.newImage)によって画像が(新しい画像に)変更されます。その後、私は条件をチェックするメソッドを呼び出し、それが真ならば、イメージをデフォルトのものに再び変更します。 しかし、すぐに変更されるので、私は変更を見ることができません。私はそれを遅くするために睡眠を挿入する。 (XMLコードでは、デフォルトで私はoldImageに画像をsetted)onClickとsetImagResource [Android] API 10

[OK]を...多分それはそうのは、CODE見てみましょう。..明確ではありません。

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()内のすべてのメソッドが終了するまでビューの変更が適用されない可能性がありますか? Thread.sleep()メソッドを使用して、事前

答えて

1

おかげで、あなたは実際には、メイン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(); 
     } 
}