我有一个从数据库中提取数据并将其填充到列表中的过程。我想在执行查询时显示进度对话框,但只有在执行查询后才能直观显示。我相信我必须在一个单独的主题中运行ProgressDialog
,但是没有提出任何建议,也无法使其发挥作用。
所以在Activity
我只有
private void DisplayAllproductListView(String SqlStatement) {
ProgressDialog dialog =
ProgressDialog.show(MyActivity.context, "Loading", "Please wait...", true);
//..................
//..................
//execute sql query here
dialog.dismiss();
}
感谢
答案 0 :(得分:11)
1.在主线程中显示您的进程对话框
2.启动一个新线程(如线程A)来处理繁重的工作
3.完成后,使用handler从Thread A向主线程发送消息,后者解除进程对话框
像这样的代码 私人ProcessDialog pd;private void startDialog()
{
pd = ProgressDialog.show(MainActivity.this, "title", "loading");
//start a new thread to process job
new Thread(new Runnable() {
@Override
public void run() {
//heavy job here
//send message to main thread
handler.sendEmptyMessage(0);
}
}).start();
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
pd.dismiss();
}
};
答案 1 :(得分:3)
尝试这样的事情:
private class MyAwesomeAsyncTask extends AsyncTask<Void, Void, Void> {
private ProgressDialog mProgress;
@Override
protected void onPreExecute() {
//Create progress dialog here and show it
}
@Override
protected Void doInBackground(Void... params) {
// Execute query here
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
//update your listView adapter here
//Dismiss your dialog
}
}
要打电话:
new MyAwesomeAsyncTask().execute();
答案 2 :(得分:0)
您需要做的就是告诉Android在主UI线程上运行它。无需创建处理程序。
TabBarController