【问题标题】:Why Postdelayed is not working in the if statement为什么 Postdelayed 在 if 语句中不起作用
【发布时间】:2017-11-22 22:03:36
【问题描述】:

为什么当我将postDelayed(this,1000); 放在if 语句中,就在seconds++; 下方时,计时器停止工作? 布局中有 3 个按钮(开始、停止、重置)。按Start->running=true,按stop->running=stop,按reset->running=false seconds=0

private void runTimer() {

    final TextView timeView = (TextView) findViewById(R.id.time_view);
    final Handler handler = new Handler();

    handler.post(new Runnable() {

        @Override
        public void run() {
            int hours = seconds / 3600;
            int minutes = (seconds % 3600) / 60;
            int secs = seconds % 60;

            String time = String.format("%d:%2d:%02d", hours, minutes, secs);
            timeView.setText(time);
            if (running) {
                seconds++;
            //handler.postDelayed(this, 1000);
            //doesnt work if i put it here
            }
            handler.postDelayed(this, 1000);
        }
    });

}

【问题讨论】:

  • 请在此处添加您的代码。
  • 它不允许我这样做..有错误我不知道为什么
  • 绝对可以在您的问题中添加代码。不要粘贴所有代码,只粘贴重现问题所需的部分。如果您在使用问题编辑器时遇到问题,SO 帮助页面中有指导。如果您还提到错误是什么,也许我们可以提供帮助。
  • 另外我建议您在发送之前阅读帖子。可能您想改进格式,在逗号后添加大写字母,并在两个 ` 之间插入代码语句(它们称为反引号)
  • 我的帖子有什么问题?为什么你们都想屏蔽我的帖子

标签: java android postdelayed


【解决方案1】:

在您调用runTimer() 时,变量running 设置为false。很可能您必须将对 runTimer() 的调用移动到 onClickStart() 方法中(在将运行设置为 true 之后)。
声明布尔值时,它们的默认值假定为 false。

【讨论】:

  • 当我把 postdelayed 放在 if 语句之外时,它可以工作。为什么?
  • @AllicioBlack 它按预期工作,因为它在false if-else statement block 的监禁之外。您的代码的问题是您的 running 变量总是错误的,我不能完全回答它,因为它不是整个代码。
  • 布局中有 3 个按钮(开始、停止、重置)。按Start->running=true,按stop->running=stop,按reset->running=false seconds=0
  • 你们都说默认运行是假的。但是如果我按开始。它应该设置运行为真。它应该增加秒数并暂停 1sec.no?(在 if else 语句中延迟)
  • 是的,运行设置为真。但此时可运行对象不再运行,因为只有在 running 为真时才会重复它。流程是这样的:runTimer 被调用 => runnable 被启动 => 它完成工作 => 它检查 running 是否为 true => running 为 false,因此 runnable 不会在 1 秒内重新运行 =>完毕。如果你想让runnable在点击开始按钮时运行post它在click方法中(如果runnable之前是false)同样,你似乎并没有真正掌握它,我建议你先学习java。如果我错了,请纠正我。
猜你喜欢
  • 2014-01-17
  • 2021-11-14
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多