Android处理程序:处理程序无法按预期工作

时间:2015-05-31 18:24:50

标签: android handler

我有一个按钮名称 btnOk ,在此按钮内我有一个正常的方法。

我的想法是,经过一段时间后,此按钮内的方法将自动执行。

所以我创建了一个处理程序来延迟我的功能。我希望编程的工作方式如下:

以下是逻辑:

  

用户可以点击按钮Ok => 20秒后,如果用户没有点击   button =>运行方法

我的问题是,每次运行此迭代时,20秒计算为总数。

例如:

  1. 从活动A开始,我开始B(OK按钮在B中,用户必须在20s内点击按钮),
  2. 第一次,用户决定点击按钮只需15秒。
  3. 之后,我开始活动A(如循环A => B => A => B ...);
  4. 再次,从活动A到B,这次我预期的方法必须在20s后运行,但仅在5s之后(我猜第一次15s +第2次开始后5s将被计为总数20),它会自动执行。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    //Do something
    value();
    
    //Create handler
    final Handler handler = new Handler();
    
    //Run method automatically after 20s
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            // Do something after 5s = 5000ms
            submitResult();
        }
    }, 20000);
    
    //Wait for user clicks, 
    //must start in 20s or submitResult(); will be executed automatically
    btn = (Button) findViewById(R.id.btnOk);
    btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            submitResult();
        }
     });
    
    
    }
    
  5. 任何人都可以帮我解决问题吗?或任何方式在一段时间后自动点击

    我真的很感激你的帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

这将是第一个Handler运行,而不是新的(在第二个活动B中创建)。如果用户点击该按钮,您应该"取消"处理程序,否则它将运行submitResult()两次。

试试这个:

btn.setOnClickListener(new View.OnClickListener() {
  public void onClick(View v) {
    handler.removeCallbacks(null);
    submitResult();
  }
});