При использовании Thread.sleep в onClick
вы фактически блокируете весь поток UI . Это не позволит Android Framework перерисовать ваше представление, поэтому изменение свойства View не будет отображаться.
Чтобы отложить выполнение, вы должны использовать View.postDelayed , который опубликует ваше действие в очереди сообщений и выполнит его позже.
public void onClick(View v) {
if(!((Button) v).getText().toString().equals("")){
return;
}
((Button) v).setText("0");
turn();
// Need a pause before tictacAI does anything
v.postDelayed(new Runnable() {
@Override
public void run() {
tictacAI("0", "X").setText("X");
turn();
if(won){
resetBoard();
won = false;
}
}
}, 1000L); //wait 1 second
}
Если выиспользуя Java 1.8, вы можете использовать лямбду вместо анонимного класса.
Еще одно замечание:
этот Runnable не будет собирать мусор до тех пор, пока не будет выполнен, поэтому длительный интервал может вызвать утечку всего вашего представления, а это очень плохо .Попробуйте использовать View.removeCallbacks , когда этот обратный вызов больше не нужен (например, для onDestroy действия)