此代码表示如果我单击一个按钮,进度条将从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);
}
}
}
};
此代码是线程运行代码。
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();
}
}
}
}
答案 0 :(得分:0)
添加一个布尔成员变量作为" ProgressBar"的标记。是不是开始了。
boolean isProgressBarRun;
单击该按钮时,更改此变量的状态。 如果第一次单击该按钮,则发送消息。 当你处理消息时,每隔10毫秒在你的" public void handleMessage(Message msg)"中重新发送消息。方法
你的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。 高位代码不正确,请查看概念。