睡在onItemClick上

时间:2014-10-04 18:07:09

标签: android sleep onitemclick

我想在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");
            }



        }
        ;
    });

1 个答案:

答案 0 :(得分: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);