重新单击按钮时进度条重置

Progress bar reset when button is re-clicked

此代码意味着如果我单击一个按钮,进度条将从 0 开始到 100%。我想让进度条重置,当我在进度条达到 100% 之前单击一个按钮时。

这是我的部分代码。

这段代码是按钮侦听器。

public void Cal_btn(View v) {

    Message msg;
    switch (v.getId()) {
        case R.id.Square:
            if (Number.getText().toString().length() == 0) {
                Toast.makeText(getApplicationContext(), "숫자를 입력하세요.", Toast.LENGTH_LONG).show();
            } else {
                pThread = new ProThread(pHandler);
                pThread.setDaemon(true);
                pThread.start();

                Cal_Result.setVisibility(View.GONE);
                progress.setVisibility(View.VISIBLE);
                msg = new Message();
                msg.what = 1;
                msg.arg1 = Integer.parseInt(Number.getText().toString());
                mThread.mBackHandler.sendMessage(msg);
            }
            break;
    }
}

而这段代码是处理程序。

Handler pHandler = new Handler(){

    public void handleMessage(Message msg){
        if(msg.what == 3){
            if(msg.arg1 == 100){
                Cal_Result.setVisibility(View.VISIBLE);
                progress.setVisibility(View.GONE);
            }else{
                progress.setProgress(msg.arg1);
            }
        }
    }
};

而这段代码是Thread 运行代码。

class ProThread extends Thread{
    int proNum = 0;
    Handler pHandler;
    ProThread(Handler handler){
        pHandler = handler;
    }

    public void run(){
        while(proNum != 100) {
            proNum++;
            Message msg = new Message();
            msg.what = 3;
            msg.arg1 = proNum;
            pHandler.sendMessage(msg);
            try {
                Thread.sleep(10);
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

添加一个布尔成员变量作为"ProgressBar"是否开始的标记。

boolean isProgressBarRun;

单击按钮时,更改此变量的状态。 如果第一次单击该按钮,则发送一条消息。 当您处理消息时,在您的 "public void handleMessage(Message msg)" 方法中每 10 毫秒重新发送一次消息。

你的onClick方法可以这样写:

boolean isProgressBarRun = false;

...

public void Cal_btn(View v) {

    Message msg;
    switch (v.getId()) {
        case R.id.Square:
            if (Number.getText().toString().length() == 0) {
                Toast.makeText(getApplicationContext(), "숫자를 입력하세요.", Toast.LENGTH_LONG).show();
            } else {
                if (isProgressBarRun) {
                    isProgressBarRun = false;
                    msg = new Message();
                    msg.what = 4; // to stop the progress bar
                    mThread.mBackHandler.sendMessage(msg);
                    msg.what = 3;
                    msg.arg1 = Integer.parseInt(Number.getText().toString());
                    mThread.mBackHandler.sendMessage(msg);
                } else {
                    isProgressBarRun = true;
                    Cal_Result.setVisibility(View.GONE);
                    progress.setVisibility(View.VISIBLE);
                    msg = new Message();
                    msg.what = 1;
                    msg.arg1 = Integer.parseInt(Number.getText().toString());
                    mThread.mBackHandler.sendMessage(msg);
                }
            }
            break;
    }
}

您的处理程序可以如下更改:

Handler pHandler = new Handler(){
    public void handleMessage(Message msg){
        if(msg.what == 4){
            progress.setVisibility(View.GONE);
        } else {
            progress.setProgress(msg.arg1);
            Message message = new Message();
            message .what = 3;
            message .arg1 = msg.arg1 + 1;
            pHandler.sendMessageDelayed(message, 10);
        }
    }
};

总而言之,您不需要实现 Thread。 上面的代码不正确,请看概念。