重新点击按钮时进度条重置[关闭]

问题描述 投票:0回答:1

此代码表示如果单击一个按钮,进度条将从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();
            }
        }
    }
}
android multithreading progress-bar android-progressbar android-thread
1个回答
0
投票

添加一个布尔成员变量作为“ProgressBar”启动或不启动的标记。

boolean isProgressBarRun;

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

你的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。上面的代码不正确,请看这个概念。

© www.soinside.com 2019 - 2024. All rights reserved.