0

我是android编程的新手。我在 postDelayed 中有一个问题,即使我要调用的值大于 1,延迟也只会在循环内执行一次。

这是我的代码

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();
               }            
            },2000);

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

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

例如

在播放媒体播放器之前,我想要延迟 2 秒,然后再延迟 2 秒,依此类推,具体取决于我要调用的值的数量……例如,值是 a4、a4 和 a4。每次调用这些值时,我都希望延迟 2 秒。有没有人可以帮助mo解决这个问题?提前致谢!:)

4

2 回答 2

4

好吧,您的问题是您是postDelayed从 for 循环内部运行的。您确实同时运行了 n 次处理程序。您同时启动所有这些(因为完成 foor 循环所需的时间不到一毫)。你应该把counter时间量。就像是

handler.postDelayed(new Runnable(){
           @Override
           public void run() {  
               mp.start();
           }            
        },countr += 2000);
于 2015-03-10T21:12:06.980 回答
0

这是一个带有延迟计时器的可运行的工作示例。

public Runnable timedTask = new Runnable()
{

    @Override
    public void run()
    {
        // type code here which will loop with the given delay



        //if you want to end the runnable type this in the condition
        if(condition) {

        handler.removeCallbacks(this);
        return;

         }



        //delay for the runnable
        handler.postDelayed(timedTask, 2000);
    }
};

您可以通过键入以下内容从任何地方调用此方法:

handler.post(timedTask);

希望能帮助到你!

于 2015-03-10T21:17:09.143 回答