按下按钮时,我想每2秒打印一次序号。我使用了以下代码:
int j=0;
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
c=Calendar.getInstance();
Delay(2 ,c.get(Calendar.SECOND));
if(j++<5)
t.setText("number "+j);
}
});
public void Delay(int p,int q){
int z=0;
while(z<p){
c=Calendar.getInstance();
i= c.get(Calendar.SECOND);
z=i-q;
}
return ;
}
但此代码打印&#34; Number 5&#34;在10秒结束时直接。 如何每隔2秒依次打印&#34; 1号&#34;,&#34; 2号&#34;,&#34; 3号和34号....
答案 0 :(得分:1)
请注意,如果您在UI线程上执行此操作,则会阻止UI线程10秒钟。有一个单独的线程来做这件事要好得多:
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
new Thread() {
public void run() {
for(int j=1; j<=5; i++) {
runOnUiThread(new Runnable() {
@Override
public void run() { t.setText("number " + j); }
});
SystemClock.sleep(2000);
}
}
}.start();
}
});
此代码启动一个新线程(因此不阻止UI),从1到5迭代输出数字(在UI线程上,因为它正在更改UI),然后睡眠2秒。
答案 1 :(得分:0)
使用Runnable发布绑定到应用程序的UI线程的处理程序,而不是睡眠或延迟。如果您在onClick()
方法中睡眠或延迟,则会阻止UI线程,这会使您的UI无响应。
public class MyActivity extends Activity implements Handler.Callback {
...
private Handler mHandler = new Handler(this);
private int mNumber = 0;
...
@Override
public void onClick(View v) {
mNumber++;
mHandler.postDelayed(new Runnable() {
public void run() {
t.setText("number: " + mNumber);
}, 2000);
}
}
答案 2 :(得分:0)
您可以使用CountDownTimer进行此操作..您只需要定义时间量和更新频率。你只需稍微调整逻辑就可以向上打印数字。
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
new CountDownTimer(60000, 2000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
}
});