2014-10-04 78 views
0

我想在OnItemClick中的兩件事之間有一些延遲,但實際上並沒有發生。如果我運行它並單擊,則只要設置了睡眠,所有內容都會停止,然後它會同時更改圖片。我想更改第一張圖片。然後睡眠,然後改變其他。Sleep Inside onItemClick

gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // clicks=0; 

      int row_no = position/3; 
      int col_no = position % 3; 

      if(clicks==0) 
      { 
       ((ImageView) gv.getChildAt(position)).setImageResource(R.drawable.kor); 
       matrix[row_no][col_no]=1; 
       // clicks++; 
      } 

      if(gepLephet()) 
      { 
       try { 
        Thread.sleep(400); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       finally{ 
        int posAi=gep(); 
        ((ImageView) gv.getChildAt(posAi)).setImageResource(R.drawable.iksz); 
        matrix[posAi/3][posAi%3]=2; 
       } 

       // Toast.makeText(getApplicationContext(),"Random: "+posAi, Toast.LENGTH_SHORT).show(); 
      } 

      /* else if(clicks==1) 
      { 
       ((ImageView) gv.getChildAt(position)).setImageResource(R.drawable.iksz); 
       matrix[row_no][col_no]=2; 
       clicks--; 
      }*/ 
      // Toast.makeText(getApplicationContext(), "position: " + position +"Random: "+posAi, Toast.LENGTH_SHORT).show(); 
      // if(matrix[0][0]==matrix[0][1]&&matrix[0][1]==matrix[0][2]){text.setText("WIN");} 
      if(isWinO()) 
      { 
       text.setText("O WIN"); 
      } 
      if(isWinX()) 
      { 
       text.setText("X WIN"); 
      } 



     } 
     ; 
    }); 
+0

你需要另一個線程 - 看看這個答案更新UI線程和延緩http://stackoverflow.com/a/14088164/1256219 – brandall 2014-10-04 18:12:34

+0

沒有用戶'Timer',使用'postDelayed' – Budius 2014-10-04 18:31:07

回答

4

onItemClick方法UI線程中運行,所以當你打電話Thread.sleep UI胎面睡着了,並在屏幕上沒有任何變化。永遠不要停止UI線程,它會被用戶認爲是滯後或錯誤。若要延遲更改用戶界面,可以使用postDelayed方法View。示例:

View view; 
view.postDelayed(new Runnable() { 
    @Override public void run() { 
     //code here will be run after 400ms delay 
    } 
}, 400);