我正在尝试在我的应用程序中实现一个进度条。 单击按钮时可以看到此进度条,然后线程也随之启动。当线程完成时,我试图使 progressBar 不可见。但它在执行时遇到了异常:
progressbar.setVisibility(View.GONE);
异常:
android.view.ViewRoot$CalledFromWrongThreadException:只有创建 View 层次结构的原始线程才能触及它的 View 。
我的代码是:
Thread thredUpdate = new Thread()
{
public void run()
{
ClearDatabase();
progressbar.setVisibility(View.GONE);
}
};
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setProgressBarVisibility(true);
ProgressBar progressbar = (ProgressBar)findViewById(R.id.progress);
progressbar .setVisibility(View.GONE);
btnUpdateDB.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View argBtnUpdateDB)
{
setProgressBarVisibility(true);
progressbar.setVisibility(View.VISIBLE);
try
{
if((progressbar.isEnabled()))
thredUpdate.start();
}
catch(Exception exSoap)
{
exSoap.printStackTrace();
}
} });
如何在不调用 setVisibility(View.GONE) 的情况下取消此进度条?
谢谢...
最佳答案
您应该从 UI 线程调用它:
runOnUiThread(new Runnable() {
public void run() {
progressbar.setVisibility(View.GONE);
}
});
另一种方法是使用 AsyncTask
而不是常规的 Thread
。
关于安卓 : cancelling progressbar caught exception : android. view.ViewRoot$CalledFromWrongThreadException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5499389/