Csabi Vidó
Csabi Vidó

Reputation: 146

Sleep Inside onItemClick

I want some delay between two thing inside an OnItemClick,but actually nothing happens. If I run it, and click ,everything stops as long as is set the sleep, then it changes the pic at the same time.I would like to change the first pic. then Sleep then change the other.

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



        }
        ;
    });

Upvotes: 0

Views: 139

Answers (1)

eleven
eleven

Reputation: 6847

onItemClick method runs inside UI thread so when you call Thread.sleep UI tread falls asleep and nothing changes on your screen. Never stop UI thread it will perceived by user as lag or bug. To change UI after some delay you can use postDelayed method of View. Sample:

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

Upvotes: 4

Related Questions