2012-06-12 57 views
2

我正在研究Android的內存遊戲,並遇到問題。當用戶點擊第二個圖像時 - 如果圖像不一樣,我想讓第二個圖像顯示1,2秒。Thread.Sleep()Android UI

我試過的是睡1-2秒。第二張圖像後的UI線程被激活 - 但這似乎不起作用 - 第二張圖像似乎沒有顯示! (只有第一個圖像的顯示)

這裏是我的代碼:

public void whenTapedImage(View v, int position) 
{ 
    i++; 
    ImageView imgV=(ImageView)v; 
    if(i%2!=0) 
    { 
     firstClick=position; 
     imgV.setImageResource(im.images.get(firstClick));   
    } 
    else 
    { 
     secondClick=position; 
     imgV.setImageResource(im.images.get(secondClick));      
     try { 
      Thread.currentThread().sleep(1000); 
      if(!(im.images.get(firstClick).equals(im.images.get(secondClick)))) 
      { 
       Toast.makeText(easyGame.this, "Try Again!", Toast.LENGTH_SHORT).show(); 
       im.notifyDataSetChanged(); 
       gridview.setAdapter(im); 
       gridview.invalidate(); 
       aux=player1Turn; 
       player1Turn=player2Turn; 
       player2Turn=aux; 
      } 
      else{ 
       done=done+2; 
       ImageAdapter.keepVisibleViews.add(firstClick); 
       ImageAdapter.keepVisibleViews.add(secondClick); 
       if(player1Turn==true) 
       { 
        player1Score++; 
        String score=Integer.toString(player1Score); 
        score1.setText(score); 
       } 
       if(player2Turn==true) 
       { 
        player2Score++; 
        String score=Integer.toString(player2Score); 
        score2.setText(score); 
       } 
      } 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    }   
} 

我在做什麼錯?

+0

'但是這似乎並沒有work.'這不是問一個問題的好方法如下。什麼對它不起作用? – Falmarri

+0

@Falmarri - 我同意這不是一個很好的方式來問這個問題,但在這種情況下,問題的主體並不是那麼重要,因爲標題包括一些衆所周知的與android的事件驅動架構不兼容的東西UI。 –

+0

相關http://stackoverflow.com/questions/10428726/waiting-in-android-app – Gray

回答

7

您不能睡覺UI線程,因爲這會阻止android將任何其他事件傳遞到您的活動的UI。

而是使用計時器並使計時器的方法使用ui線程工具上的運行來進行所需的推遲更改。

爲了健壯性,您可能需要實現一個狀態機(無論是正式的還是有效的)來跟蹤應該發生的事情 - 您需要確定當前的延遲是否應該中止或強制執行,如果另一個按鈕被按下,並使狀態機適當地對待它。