【发布时间】: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作为参数的构造函数来实现Runnable的mUpdateTimeTask非匿名实现?这样你就可以在听众和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