我有这个问题:在长时间操作中,我会显示ProgressBar
。有时,在此操作过程中,程序必须稍微询问用户
然后,我想显示DialogBox
,但如果我这样做,则会收到错误,因为在DialogBox
期间无法显示Thread
。
如何解决我的问题?
答案 0 :(得分:1)
请使用AsyncTask而不是线程然后它将起作用你不能在线程中执行UI相关的工作。
AsyncTask可以正确,轻松地使用UI线程。该类允许在UI线程上执行后台操作和发布结果,而无需操纵线程和/或处理程序。
了解AsyncTask
http://developer.android.com/reference/android/os/AsyncTask.html
Android支持使用标准Java Thread类来执行异步处理。
Android还提供java.util.concurrent包以在后台执行某些操作,例如:使用ThreadPools和Executor类。
如果需要从新线程更新用户界面,则需要与用户界面线程同步。
http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html
答案 1 :(得分:1)
我认为这就是你想要的。
开始操作: -
new StartTask().execute("");
StartTask类: -
public class StartTask extends AsyncTask<String, Integer, String> {
private ProgressDialog pdialog;
@Override
protected void onPreExecute() {
// UI work allowed here
pdialog = new ProgressDialog(syncContext);
// setup dialog here
pdialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pdialog.setMessage("Updating...");
pdialog.setCancelable(false);
pdialog.show();
}
@Override
protected void onProgressUpdate(Integer... progress) {
if(pdialog != null) {
pdialog.dismiss();
}
if(progress[0] == 0) {
AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
alertbox.setCancelable(false);
alertbox.setMessage("This is first Alert").setPositiveButton("OK",
new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
pdialog.show();
}
});
alertbox.create();
alertbox.show();
} else if(progress[0] == 1) {
AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
alertbox.setCancelable(false);
alertbox.setMessage("This is second Alert").setPositiveButton("OK",
new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
pdialog.show();
}
});
alertbox.create();
alertbox.show();
}
}
@Override
protected void onPostExecute(String returnVal) {
// UI work allowed here
if(pdialog != null) {
pdialog.dismiss();
}
}
@Override
protected String doInBackground(String... params) {
for(int i = 0; i < 3; i++) {
//do some work here
publishProgress(i);
}
}
}