Как правильно сделать задержку выполнения кода в цикле (добавление view-элементов)
При запуске Activity должна появиться кнопка, через несколько секунд пропасть, потом снова появиться, через несколько секунд пропасть и еще раз то же самое. Написал код, при его выполнении кнопка появляется один раз, исчезает, больше кнопок не появляется. Как это исправить?
Код:
package ru.startandroid.develop.test2;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
ConstraintLayout csl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
csl = findViewById(R.id.csl);
for (int i=0; i < 3; i ++) {
Button btn = new Button(this);
csl.addView(btn);
//через 5 секунд кнопка должна исчезнуть
Handler h = new Handler(getMainLooper());
Runnable r = new Runnable() {
@Override
public void run() {
csl.removeAllViews();
}
};
h.postDelayed(r, 5000);
}
}
}
в activity_main.xml только ConstraintLayout.
Ответы (2 шт):
Это скорее всего потому что вы отправляете исчезать кнопку через 5 секунд, а цикл 5 секунд ждать не будет, он после h.postDelayed(r, 5000); сразу же выполняет следующую итерацию. Т.е. у вас по сути выполниться только последняя итерация, как то так.
В цикле у Вас задержки нет. Его работа выглядит так: "создай вьюху, создай убийцу который сработает через 5 сек". И так три раза. Т.е. один за другим создаются ТРИ вьюхи и ТРИ убийцы. По факту убивает всех первый сработавший убийца (т.к. removeAllViews), другие два срабатывают вхолостую.
Решений может быть много. Например - создать метод порождения вьюхи и хендлер-убийцу.
Метод создает вьюху и говорит хендлеру убить ее через 5 сек.
Хендлер убивает ее, ждет мало-мало (чтоб видно было, что она исчезла) и дергает метод, порождающий.
Ну и счетчик прикрутить ))