java - 如何将变量传递给延迟后的可运行对象?

标签 java runnable postdelayed

我创建了两个从 runnable() 实现的类。然后我多次调用他们,延迟时间各不相同。问题是,当我稍后运行 runnable 时,它​​需要知道调用 postdelay 时的变量值,而不是实际运行时的值。

我认为我现在需要做的是在调用后延迟时将变量传递给可运行实例。但是对于我的一生,我不知道该怎么做。以下是源代码供引用:

public void PlaySequence() throws InterruptedException{

for(int i = 0;i<level;i++){
    mHandler.postDelayed(mToggleButtonOn, (i+1)*playbackOffTime);
    mHandler.postDelayed(mToggleButtonOff, (i+1)*playbackOnTime);           
    currentProgIteration++;
}        
currentProgIteration=0;     
}

private Runnable mToggleButtonOn = new Runnable() {

public void run() {
    try {
            if(Sequence[currentProgIteration]==0){
                ImageCard[0].setImageDrawable(getResources().getDrawable(R.drawable.yellow));
            }
            else if(Sequence[currentProgIteration]==1){
                ImageCard[1].setImageDrawable(getResources().getDrawable(R.drawable.blue));
            }
            else if(Sequence[currentProgIteration]==2){
                ImageCard[2].setImageDrawable(getResources().getDrawable(R.drawable.red));
            }
            else if(Sequence[currentProgIteration]==3){
                ImageCard[3].setImageDrawable(getResources().getDrawable(R.drawable.green));
            }                   
        }
     catch (IllegalStateException e) {
        e.printStackTrace();
    }

}
};

private Runnable mToggleButtonOff = new Runnable() {

public void run() {
    Log.d("Info", "running Off currentProgIteration: "+currentProgIteration);

    try {
            if(Sequence[currentProgIteration]==0){
                ImageCard[0].setImageDrawable(getResources().getDrawable(R.drawable.darkyellow));
            }
            else if(Sequence[currentProgIteration]==1){
                ImageCard[1].setImageDrawable(getResources().getDrawable(R.drawable.darkblue));
            }
            else if(Sequence[currentProgIteration]==2){
                ImageCard[2].setImageDrawable(getResources().getDrawable(R.drawable.darkred));
            }
            else if(Sequence[currentProgIteration]==3){
                ImageCard[3].setImageDrawable(getResources().getDrawable(R.drawable.darkgreen));
            }                   
        }
    catch (IllegalStateException e) {
        e.printStackTrace();
    }

}
};

runnables 使用全局变量 currentProgIteration,但是当它们在延迟后运行时,该变量已设置回 0。

感谢您的任何建议。

最佳答案

最简单的方法可能是使用匿名 Runnable。

final int delay = (i+1)*playbackOffTime;
mHandler.postDelayed(new Runnable() {
   final Color[] colours = { R.drawable.yellow, R.drawable.blue, R.drawable.red, R.drawable.green } ;
   public void run() {
        try {
           // can use "delay" here
           int seq = Sequence[currentProgIteration];
           ImageCard[seq].setImageDrawable(getResources().getDrawable(colours[seq]));
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
    }
});

关于java - 如何将变量传递给延迟后的可运行对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7867553/

相关文章:

java - 小程序安全

java - 使用 J2EE 和 Jboss 每次测试后回滚

java - 播放不间断的声音声音池

java - 帮助在 Java 中实现 Runnable

android - 如何延迟执行android

android - 在延迟通话期间增加进度条

java - 我的代码的任何部分都可以并行吗

java datagramchannel数据丢失

android - 如何完全删除可运行计时器?

android - onUserInteraction() 到底什么时候被调用?