【问题标题】:How do i increase the value of a textview with a handler? (or other solution)如何使用处理程序增加 textview 的值? (或其他解决方案)
【发布时间】:2017-10-13 15:07:42
【问题描述】:

首先,我已经尝试过了:Continuously increase integer value as the button is pressed

但是我有 59 个错误,是的,59 个,而且我以前使用 Eclipse,它清楚地告诉你你有什么样的错误,如何修复它,而且 Android Studio 看起来是为有经验的人制作的......我什至无法理解到底该怎么做才能修复所有错误(顺便说一句,当我尝试修复某些东西时,我会以某种方式破坏 10 多个)。

所以...给定一个 Button 和一个 TextView,我该如何增加 textview(例如 Clicker 游戏)并使其停止再次按下相同的按钮: 以及如何设置每次“点击”之间的间隔

TextView score = (TextView) findViewById(R.id.textView);
score.setText(Integer.toString(i));

    Button click =   (Button) findViewById(R.id.button2);
    click.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            i++;
            score.setText(Integer.toString(i));

        }
    });

顺便说一句...我不需要解决方案,我需要了解线程或处理程序的工作原理,是的,每个人都会向我推荐文档,但我需要看到一个简单的示例逐部分解释,我通过阅读文档会比我已经了解的更多。

【问题讨论】:

  • 从第一个错误开始。它是什么?是哪一行代码导致的?
  • “当我尝试修复某些东西时,我会以某种方式破坏 10 多个”这是所有程序员的共同经历,即使是我们中最有经验的程序员
  • “我需要了解线程或处理程序的工作原理”线程用于需要很长时间才能完成的拍摄,例如读取文件或下载图像。处理程序用于线程之间的通信。您不需要其中任何一个来完成手头的任务。
  • 请参阅我的第一条评论和edit您的问题以显示您遇到的错误。解决编译器错误是学习过程的一部分。

标签: android handler android-handler


【解决方案1】:

给定一个 Button 和一个 TextView 我如何增加文本视图(例如 Clicker 游戏)并使其停止再次按下相同的按钮:以及如何设置每次“点击”之间的间隔

鉴于您的问题中的 scoreclick 小部件:

第 1 步:将 Runnable 字段添加到您的活动或片段。在这里,我称它为incrementer

第 2 步:在您的活动或片段中定义一个 static final int DELAY 字段,以及您想要的延迟时间(“间隔”)以毫秒为单位。

第 3 步:根据incrementer 的状态,让您的Button 使用postDelayed()removeCallbacks()

click.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(final View v) {
    if (incrementer==null) {
      incrementer=new Runnable() {
        @Override
        public void run() {
          i++;
          score.setText(Integer.toString(i));
          v.postDelayed(incrementer, DELAY);
        }
      };
      incrementer.run();
    }
    else {
      v.removeCallbacks(incrementer);
      incrementer=null;
    }
  }
}

incrementer 字段有两个作用。它跟踪我们是否增加了TextView 的内容,并且是实际的代码进行了增加。

如果incrementernull,我们目前不会增加TextView。因此,我们分配incrementer 一个Runnable,它可以增加TextViewRunnable 还调用postDelayed() 说“嘿,在DELAY 毫秒后再次运行这个Runnable”。我们第一次run()Runnable 自己,一开始就填充TextView 并触发postDelayed() 调用以安排下一个增量。

然后将继续“循环”(run() 调用postDelayed(),安排将来调用run())直到用户再次单击该按钮。然后,我们看到incrementernot null,所以我们必须增加TextView 并且需要停止。 removeCallbacks() 取消安排最后一次 postDelayed() 调用,停止“循环”。我们将incrementer 设置为null 主要是为了为下一次按钮点击做好准备。

【讨论】:

  • 抱歉,迟到的“正确答案”打勾:D 感谢您的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 2018-01-26
  • 2013-09-20
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多