Как правильно сделать задержку выполнения кода в цикле (добавление 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 шт):

Автор решения: Madoka Magica

Это скорее всего потому что вы отправляете исчезать кнопку через 5 секунд, а цикл 5 секунд ждать не будет, он после h.postDelayed(r, 5000); сразу же выполняет следующую итерацию. Т.е. у вас по сути выполниться только последняя итерация, как то так.

→ Ссылка
Автор решения: Adm123

В цикле у Вас задержки нет. Его работа выглядит так: "создай вьюху, создай убийцу который сработает через 5 сек". И так три раза. Т.е. один за другим создаются ТРИ вьюхи и ТРИ убийцы. По факту убивает всех первый сработавший убийца (т.к. removeAllViews), другие два срабатывают вхолостую.

Решений может быть много. Например - создать метод порождения вьюхи и хендлер-убийцу.

Метод создает вьюху и говорит хендлеру убить ее через 5 сек.

Хендлер убивает ее, ждет мало-мало (чтоб видно было, что она исчезла) и дергает метод, порождающий.

Ну и счетчик прикрутить ))

→ Ссылка