我想在android中创建秒表类计数器。有一个按钮,我按下计数器开始,当我按下停止按钮时,它停止。
我已编写此代码,但似乎无法正常工作
public class counter extends Activity {
/** Called when the activity is first created. */
Button btnStart;
TextView txtCounter;
boolean status = false;
int counter = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnStart = (Button) findViewById(R.id.btnStart);
txtCounter = (TextView) findViewById(R.id.txtCounter);
initCouner();
btnStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(status == false)
{
for(int i=0; i < 500; i++)
{
txtCounter.setText(String.valueOf(i));
}
btnStart.setText("Stop");
status = true;
}
else if (status == true)
{
btnStart.setText("Start");
status = false;
initCouner();
}
}
});
}
public void initCouner()
{
btnStart.setText("Start");
txtCounter.setText("0");
}}
当循环开始时它显示499,没有显示计数。 并且停止按钮不起作用。
由于
答案 0 :(得分:2)
在T0X1C的帮助下,我想出了以下代码:
public void onClick(View v) {
if(status == false)
{
btnStart.setText("Stop");
status = true;
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while(status!=false)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
txtCounter.setText(String.valueOf(counter));
counter++;
}
});
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
else if (status == true)
{
btnStart.setText("Start");
status = false;
initCouner();
}
}
});
答案 1 :(得分:1)
将您的代码更改为此
public void onClick(View v) {
if(status == false)
{
btnStart.setText("Stop");
status = true;
new Thread(new Runnable()
{ run(){
for(int i=0; i < 500; i++)
{
runOnUiThread(new Runnable()
{
@Override
public void run()
{
txtCounter.setText(String.valueOf(i));
}
});
Thread.sleep(1000);
}}
}).start();
}
else if (status == true)
{
btnStart.setText("Start");
status = false;
initCouner();
}
}
});
答案 2 :(得分:0)
也许问题是你应该在一个单独的线程中进行计数。查看asynctask(http://developer.android.com/reference/android/os/AsyncTask.html)来做到这一点。
答案 3 :(得分:0)
我建议你看一下这篇文章http://developer.android.com/resources/articles/timed-ui-updates.html 你当前的方法不会起作用..