2014-10-04 3 views
0

OnItemClick 내부에서 두 가지 사이의 지연이 필요하지만 실제로는 아무 일도 일어나지 않습니다. 만약 내가 그것을 실행하고 클릭하면 모든 것이 잠자기가 설정되어있는 한 멈추고 동시에 사진이 바뀝니다. 나는 첫 사진을 바꾸고 싶습니다. 잠자기 후 다른 것을 바꾸십시오. 당신이 Thread.sleep UI 트레드가 잠 전화 아무것도 화면에 변화 없을 때잠자기 내부 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

당신은 다른 스레드가 필요합니다 - 'Timer'을 UI 스레드를 업데이트하고 http://stackoverflow.com/a/14088164/1256219 – brandall

+0

지연이 답을 체크 아웃 사용자를하지 않는,'postDelayed'를 사용 – Budius

답변

4

onItemClick 방법은 그래서 UI 스레드 내에서 실행됩니다. 사용자가 지연 또는 버그로 인식하게 될 UI 스레드를 중지하지 마십시오. 약간 지연 후 UI를 변경하려면 방법을 View으로 사용할 수 있습니다. 샘플 :

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