如何频繁更新EditText中的数字?

时间:2016-01-12 17:04:12

标签: java android

我的代码应该经常在您单击按钮后从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 ..)?

2 个答案:

答案 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

这可能会对你有帮助。