【问题标题】:Stopwatch getting static value from runnable, editing variable inside runnable秒表从可运行中获取静态值,在可运行中编辑变量
【发布时间】:2013-03-14 15:57:24
【问题描述】:

我要创建秒表,但遇到了一些麻烦。我的代码看起来是这样的:

1 对于开始按钮:

    start.setOnClickListener(new OnClickListener() {
        @Override
    public void onClick(View v) {
               // some code
      mHandler.removeCallbacks(mUpdateTimeTask);
      mHandler.postDelayed(mUpdateTimeTask, 1);
      start.setText("Lap");
     }});

2 对于可运行:

public Runnable mUpdateTimeTask = new Runnable() {

     public void run() {
          EditText licznik = (EditText)findViewById(R.id.editText1);
          // some code
          licznik.setText(time+"");
mHandler.postDelayed(this, 1);

      }
   };

我的秒表非常适合:开始、停止。

但我无法在重置按钮的 onclicklistener 操作中创建:licznik.setText(""); 因为 licznik 是在 mUpdateTimeTask 内部启动的,所以我也不能将 licznik 移到 mUpdateTimeTask 之外,因为它当时不起作用。

此外,正如您注意到单击后我的开始按钮将变为 lap 并且 lap 应该从 runnable 获取实际时间。我不知道怎么做,因为 runnable 是动态的。

有人有解决办法吗?

【问题讨论】:

  • 为什么你不能用接受licznik作为参数的构造函数来实现RunnablemUpdateTimeTask非匿名实现?这样你就可以在听众和mUpdateTimeTask之间分享licznik...
  • 你的意思是创建类 mUpdateTimeTask 实现 Runnable ?如果是,我尝试这样做,但我不能使用 mHandler,如果不是,请解释我如何做到这一点
  • 您能否显示您尝试创建mUpdateTimeTask implements Runnable 的代码以及它是如何导致您的任务失败的?
  • 是的,我确实尝试过这样做: public class mUpdateTimeTask implements Runnable{ Runnable rr = new Runnable( public void run(){ // some my staff } );之后当我尝试使用处理程序时: mHandler.postDelayed(mUpdateTimeTask.this.rr, 1);我有错误

标签: multithreading handler runnable stopwatch


【解决方案1】:

不确定,如果这会有所帮助,但您可以通过以下方式创建Runnable

class UpdateTimeTask implements Runnable {
    private final EditText whatever;

    UpdateTimeTask(EditText whatever) {
        this.whatever = whatever;
    }

    @Override
    public void run() {
        // act upon whatever
    }
}

【讨论】:

    猜你喜欢
    • 2013-07-20
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    相关资源
    最近更新 更多