如何在再次继续下一个循环之前延迟 for 循环内的操作

How to delay an action inside a for loop before continuing the next loop over again

大家好,我是 android 编程新手。我的问题是我想在根据我的数组的大小一遍又一遍地继续下一个循环之前进行延迟,这样声音就不会重叠。

这是我的代码:

protected void managerOfSound() {
    int size = tempq.size();
    for (int i = 0; i < tempq.size(); i++) {
        String u =tempq.get(i);

        //WHOLE
        if (u.equals("a4")){
            mp = MediaPlayer.create(this, R.raw.a4);
            mp.start();


        }else if (u.equals("b4")){
            mp = MediaPlayer.create(this, R.raw.b4);
            mp.start();


        }else if (u.equals("c4")){
            mp = MediaPlayer.create(this, R.raw.c4);
            mp.start();


        }
    }
}

我尝试使用 Thread.sleep,但我需要通过单击按钮来停止播放声音,但由于 Thread.sleep 我无法单击按钮,所以我不得不忽略使用它。但这是我的代码,以防万一有人对此有解决方案。我已经尝试过 Thread.currentThread.interrupt,但是当我使用它时,我的声音再次重叠。

代码使用 Thread.sleep:

protected void managerOfSound() {
    int size = tempq.size();
    for (int i = 0; i < tempq.size(); i++) {
        String u =tempq.get(i);

        //WHOLE
        if (u.equals("a4")){
            mp = MediaPlayer.create(this, R.raw.a4);
            mp.start();
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ie) {
                // TODO Auto-generated catch block

            }

        }else if (u.equals("b4")){
            mp = MediaPlayer.create(this, R.raw.b4);
            mp.start();
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ie) {
                // TODO Auto-generated catch block

            }

        }else if (u.equals("c4")){
            mp = MediaPlayer.create(this, R.raw.c4);
            mp.start();
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ie) {
                // TODO Auto-generated catch block

            }

        }
    }
}

我尝试过的另一种方法是 postDelayed,但它似乎在第一个循环后没有延迟。

这是我的 postDelayed 代码:

protected void managerOfSound() {
    int size = tempq.size();
    for (int i = 0; i < tempq.size(); i++) {
        String u =tempq.get(i);

        //WHOLE
        if (u.equals("a4")){
            mp = MediaPlayer.create(this, R.raw.a4);

            handler.postDelayed(new Runnable(){
               @Override
               public void run() {  
                   mp.start();
               }            
            },4000);

        }else if (u.equals("b4")){
            mp = MediaPlayer.create(this, R.raw.b4);

            handler.postDelayed(new Runnable(){
               @Override
               public void run() {  
                   mp.start();
               }            
            },4000);

        }else if (u.equals("c4")){
            mp = MediaPlayer.create(this, R.raw.c4);

            handler.postDelayed(new Runnable(){
               @Override
               public void run() {  
                   mp.start();
               }            
            },4000);                
        }
     }
  }

我也尝试按照其他人的建议将 ,4000 更改为 (i+1)* 4000,但仍然无法正常工作。我也试过将延迟放在 if else 语句之外,但结果是一样的。

有没有人可以建议和帮助我解决我的问题?请。我已经工作了一个星期。提前致谢。

请使用这个

  for (int i = 0; i < 4; i++) {
            String u = " q";

            handler = new Handler();
            handler.postDelayed(new Runnable(){
                @Override
                public void run() {  
                   Toast.makeText(getApplicationContext(), "i" , Toast.LENGTH_SHORT).show();
                }            
             },4000);
}

意味着把你所有的条件都放在一个处理程序中,每次都初始化处理程序。这在我这边正常工作。

试试这个代码:

 for (int i = 0; i < tempq.size(); i++) {
                String u =tempq.get(i);

                //WHOLE
                if (u.equals("a4")){
                    mp = MediaPlayer.create(this, R.raw.a4);
                    mp.start();


                }else if (u.equals("b4")){
                    MediaPlayer mp1 = MediaPlayer.create(this, R.raw.b4);
                    mp.setNextMediaPlayer(mp1);


                }else if (u.equals("c4")){
                    MediaPlayer mp2= MediaPlayer.create(this, R.raw.c4);
                    mp.setNextMediaPlayer(mp2);


                }
            }