我的代码应该经常在您单击按钮后从EditText中的循环更新数字(不仅显示结果,延迟为100)。
旧代码:
button2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
while (repeat > 0) {
num1 = new Random().nextInt(6)+1;
edit1.setText(String.valueOf(num1));
repeat = repeat - 1;
rep.setText(String.valueOf(repeat));
}
}
});
现在我有了这个:
final Handler randomHandler = new Handler();
final Runnable randomUpdate = new Runnable() {
@Override
public void run() {
num1 = new Random().nextInt(6) + 1;
edit1.setText(String.valueOf(num1));
repeat--;
rep.setText(String.valueOf(repeat));
randomHandler.postDelayed(this, 1000);
}
};
btnpl5.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
repeat = repeat + 5;
rep.setText(String.valueOf(repeat));
button2.setClickable(true);
button2.setEnabled(true);
}
});
button2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
randomUpdate.run();
button2.setClickable(false);
button2.setEnabled(false);
}
问题:在重复为0后它不会停止(它继续在-1 -2 -3 -4 ..)?
答案 0 :(得分:0)
您可以使用AsyncTask
延迟后台,publishProgress()
更新用户界面。
class TextDisplayTask extends AsyncTask<Integer, Integer, Void> {
private int DELAY_MILLIS = 100; // ... set your delay here
@Override
protected Void doInBackground(Integer... params) {
for (int i = 0; i < params[0]; i++) {
int num = new Random().nextInt(6) + 1;
publishProgress(num);
Thread.sleep(DELAY_MILLIS);
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
edit1.setText(String.valueOf(values[0]));
}
}
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new TextDisplayTask().execute(20); // show a number 20 times
}
});
答案 1 :(得分:0)
在调用任何方法时,您必须始终在UI线程上 视图。如果您正在其他线程上工作并想要更新 该线程的视图状态,你应该使用一个处理程序。
试试这个,
handler.postDelayed(new Runnable(){
@Override
public void run() {
num1 = new Random().nextInt(6)+1;
// get previous value and append new generated
edit1.setText(edit1.getText().toString()+String.valueOf(num1));
}
}, (1000)); // run this method in every 1000 milliseconds
这可能会对你有帮助。