【发布时间】:2018-07-09 01:15:15
【问题描述】:
这段代码意味着如果我单击一个按钮,进度条会从 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();
}
}
}
}
【问题讨论】:
-
那么问题出在哪里?首先,您在 MainThread 中启动 ProThread。它可能会阻塞 MainThread。您需要再次检查“Handler/MessageQueue”的概念和实现。
-
尝试禁用按钮点击一次,并在进度条达到 100% 时禁用响应式按钮点击。
-
@yoonhok 当我在进度条达到 100% 之前单击一个按钮时,另一个进度条也会开始。所以两个进度条重叠了,第一次启动的进度条不会停止。
-
@FahadEjazButt 这不是我想要的...
-
我已经告诉过你,你是直接在 MainThread 中启动 ProThread。您应该实现可运行对象并将其转发到处理程序中,例如: Handler mHandler = new Handler(); mHandler.post(mRunnable);
标签: android multithreading progress-bar android-progressbar android-thread