При настройке видимости ImageView в Java отображается только результат, а не промежуточные состояния представления. Результат просто отличный, но между началом и концом индикатор выполнения не виден.
Я уже пробовал запускать код в UI-потоке (как видно из кода). Это ничего не меняет.
Reconnect — это ImageButton, который при нажатии должен скрывать ImageView ConnectionStatus, показывать ProgressBar с именем Connecting, спать 1 с, а затем снова скрывать Progressbard/показывать ImageView.
Reconnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
runOnUiThread(new Runnable() {
@Override
public void run() {
ConnectionStatus.setVisibility(View.INVISIBLE);
Connecting.setVisibility(View.VISIBLE);
try {
Thread.sleep(1000);
}
catch(InterruptedException e){}
Connecting.setVisibility(View.INVISIBLE);
ConnectionStatus.setImageResource(R.drawable.ic_baseline_check_24px);
ConnectionStatus.setVisibility(View.VISIBLE);
}
});
}
});
Thread.sleep()
блокирует текущий поток. Ваш поток пользовательского интерфейса не может обрабатывать какие-либо события, такие как перерисовка представлений после изменения их видимости.
Вы можете использовать Handler
postDelayed()
, чтобы опубликовать Runnable
для выполнения позже, не блокируя поток от выполнения других вещей. Все классы View
поставляются с Handler
из коробки, поэтому вы можете просто вызвать postDelayed()
на один из ваших View
.