beginButton.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
PlayThread playThread = new PlayThread();
Thread thread = new Thread(playThread);
thread.start();
}
});
public class PlayThread implements Runnable {
@Override
public void run() {
beginButton.setClickable(false);
pauseButton.setClickable(true);
messageBool = true;
int maxProgressBar = playProgressBar.getMax();
int currentInt = playProgressBar.getProgress();
for(; currentInt <= maxProgressBar; ++currentInt)
{
if(messageBool == false)
{
break;
}
playProgressBar.incrementProgressBy(1);
try {
Thread.sleep(400);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(currentInt > maxProgressBar)
{
playProgressBar.setProgress(0);
beginButton.setClickable(true);
pauseButton.setClickable(false);
}
}
};
大家好。这段代码有什么问题吗?我知道我们不能在除UI线程之外的其他线程中操作UI的控件。但是这段代码运行OK。那么有什么问题或者我错过了什么吗? 提前致谢!
最佳答案
如果您不以需要在屏幕上重新绘制的方式修改View
,那么您就是安全的。 setClickable
仅修改其属性之一,例如,如果您要设置文本或修改该 View
的 LayoutParams
,该操作将使 View
无效,将会出现可怕的异常 Touched from the error thread...etc。
ProgressBar
是线程安全的,可以在任何线程中使用。
关于java - Android:在其他线程中操作UI控件,但是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11662254/