以下のコードで数字が格納されたリストからひとつずつ取り出して、反復処理をしています。ところがこのコードを実行するとボタンの色が同時にかわる現象が発生します。

デバッグを実行しステップイン実行するとたしかに反復処理になっているのですが、なぜこのようなことがおこるか全くわかりませんでした。

前回の質問ではThread.sleep()を使用して待機させていたのですが、for文の処理が全て終わってからボタンの色が変わりました。

今までに試したこと
①ハンドラー:ハンドラーを使うと色が同時に変わる
②timer.scedule(): sceduleも結果は一緒で同時に色が変わる
③Thread.sleep(): Thread.sleep()を使うとfor文が終了して色が変わる
④switch文全体をtimer処理しようと思いついたが、ローカル変数をうけとることができない。
⑤ローカルにアクセスするためにrun()メソッドにfor文を書けばよいと思ったが構文ルールに反するみたい

「色を変える→1秒止まる->また色を変える」とやりたいだけなのですが・・・

よろしくお願いいたします。

for(int r : randomList){
    switch (r) {
        case 1:
            button1.setBackgroundColor(Color.BLACK);
            new Handler().postDelayed(new Runnable(){
                @Override
                public void run(){
                    button1.setBackgroundColor(Color.WHITE);
                }
            }, 100);
            break;
        case 2:
            button2.setBackgroundColor(Color.BLACK);
            new Handler().postDelayed(new Runnable(){
                @Override
                public void run(){
                    button2.setBackgroundColor(Color.WHITE);
                }
            }, 100);
            break;
        case 3:
            button3.setBackgroundColor(Color.BLACK);
            new Handler().postDelayed(new Runnable(){
                @Override
                public void run(){
                    button3.setBackgroundColor(Color.WHITE);
                }
            }, 100);
            break;
        case 4:
            button4.setBackgroundColor(Color.BLACK);
            new Handler().postDelayed(new Runnable(){
                @Override
                public void run(){
                    button4.setBackgroundColor(Color.WHITE);
                }
            }, 100);
            break;
    }
}