Спи внутри 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 ответ

Решение

onItemClick метод выполняется внутри потока пользовательского интерфейса, поэтому, когда вы вызываете Thread.sleep Интерфейс UI засыпает, и на вашем экране ничего не меняется. Никогда не останавливайте поток пользовательского интерфейса, он будет восприниматься пользователем как задержка или ошибка. Чтобы изменить интерфейс после некоторой задержки, вы можете использовать postDelayed метод View, Образец:

View view;
view.postDelayed(new Runnable() {
    @Override public void run() {
        //code here will be run after 400ms delay
    }
}, 400);
Другие вопросы по тегам