2011-06-11 117 views
1

安装程序:我有一个4阶段的活动,我使用postdelayed处理程序暂停两个嵌套的postdelays。取消暂停/等待postdelayed处理程序/可运行,并仍然激活暂停的代码

时间轴:

stage1 | CODE FIRES | stage2 |代码防火| stage3 | CODE FIRES | STAGE4

的stage1:失活的,只是示出了定制alertdialog

的stage2:停用(大部分)与视觉效果的用户,包括countdowntimer

stage3的:用第二countdowntimer

STAGE4停用:用户交互,没有倒计时或额外的暂停

我希望用户能够在按下按钮时跳到stage2的末尾,这会取消倒数计时器和postdelayed(wi在取消它正在等待启动的代码)

我试图取消两个,每个单独但没有成功,这里是我用过的命令。

countdowntimer.cancel(); // this didn't work from the button or a void call 
    handler.removeCallbacks(runnable); // want to skip to end of stage2 

我看到一些引用的try/catch,或者可能使用一个线程搜索,但不知道如何使用,或者如果它是适当的。

感谢您的任何意见。

**编辑用于非工作守则参考:* 我切大部分无关的东西,不知道如果我杀了};或额外

public class Main extends Activity { 

public Boolean onOffCDT = true; 
public Handler handler2Mem; 
public Runnable mem2Runnable = null; 
public CountDownTimer aCounter; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    aCounter = null;   
    final Handler handlerMem = new Handler(); 
    final Runnable memRunnable = new Runnable() { 

     public void run() { 
     //code 
       final CountDownTimer aCounter = new CountDownTimer(memTime, 100) { 

       public void onTick(long millisUntilFinished) { 
        //update time 
        if(onOffCDT.equals(false)) { 
         onOffCDT = true; 
    //     aCounter.cancel(); 
        } 
       } 

       public void onFinish() { 
        title.setText(tempTitle); 
       } 
     }; 
      aCounter.start();    


    Handler handler2Mem = new Handler(); 
    Runnable mem2Runnable = new Runnable() { 
     public void run() { 
      //code 
      CountDownTimer bCounter = new CountDownTimer(8000, 100) { 

       public void onTick(long millisUntilFinished) { 
      //update time 
       } 

       public void onFinish() { 
        title.setText(tempTitle); 
       } 
       }; 
      bCounter.start(); 
      stage3(8000); //another delay    
     }; 
    }; handler2Mem.postDelayed(mem2Runnable, memTime); 


    }  

}; handlerMem.postDelayed(memRunnable, 2500); 

    submit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // this button checks stage#, if stage4 info - else...  
      }else{ 
      aCounter.cancel(); 
       onOffCDT = false; 
       cancelCountDown(mem2Runnable, handler2Mem); 
      } 
     } 

    }); 

    } 

private void stage3 (Integer tTime) { 
    Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
      public void run() { 
       //Do Stuff 

     } 
    }, tTime); 
} 

public void cancelCountDown(Runnable run2, Handler hand2) { 

     hand2.removeCallbacks(run2); 

} 
+0

所以...... STA的保释其设置为true?还有谁? – Toclmi 2011-06-17 21:14:26

回答

0

只需在你的方法添加一个if ((boolean)canceled)return,当你想取消

+0

没有遵循你所说的,我遇到了无法将变量设置为这两个部分,因为它们没有被初始化。使用Final或public可以让我在代码中使用它们,但就代码而言,它们还没有启动。 – Toclmi 2011-06-12 00:27:20

+0

在类中声明它们而不是在方法中并将它们设置为null。 – 2011-06-12 01:33:45

+0

感谢您的尝试,但是您对我的评价并不明确,因为我是Android/Java新手。我的理解是,一种方法基本上是一组被称为预制“私人无效...”或提供返回“私人字符串/等...”(我知道VB的子/功能)的代码被称为一类在活动编码中有一个重要的定义吗?是不是我的CountDownTimer和Handler/Runnable类?是否必须使用Class来定义它们?这一件事实在让我烦恼,现在我浪费了很多时间试图完成某些事情几乎是空的,应该简单多了 – Toclmi 2011-06-12 17:01:38