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