我使用线程,以便在我的应用加载一些数据时显示进度对话框。如果出现错误,它将停止进度对话框并显示弹出窗口"错误"。但是我发现警报对话框无法在UI线程内运行,我需要使用Handler。有人可以帮忙解决这个问题吗?这是我的代码。感谢
verifyCode.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
final ProgressDialog progressDialog = ProgressDialog.show(
Activate.this, "", "Loading...");
new Thread(new Runnable() {
public void run() {
try {
new AlertDialog.Builder(Activate.this)
.setTitle(getResources().getString(R.string.InvalidKey))
.setMessage(getResources().getString(
R.string.PleaseEntervalidRegistration)).setNeutralButton(
"OK", null).show();
progressDialog.dismiss();
//more code
}).start();
}
答案 0 :(得分:3)
您无法在非UI线程上更改UI元素。 onClick
将在UI线程上运行,但由于您在Thread
内生成onClick
,因此无法从Thread
内部操纵非UI元素。将您的AlertDialog
和ProgressDialog
来电转移到产生新Thread
之前。
另外,正如@lightblade建议的那样,如果你需要做一些需要大量后台处理和基于该处理的UI操作的动作,那么你应该使用AsyncTask
s。它提供了可以覆盖的方法,用于预处理,实际处理,后处理和更新进度。