我有一个带有列表视图的活动。当我调用此活动时,该活动大约需要3-5秒才能出现并显示列表视图。看起来好像没有按下按钮来加载活动,我想在加载时显示一个进度对话框,但无法确定。
ProgressDialog progress;
progress = ProgressDialog.show(this, "Loading maps!",
"Please wait...", true);
// sort out track array
getTracks();
progress.dismiss();
我使用listview对活动的oncreate()执行了上述操作,但是对话框从未显示过吗?
我想要的是在按下按钮时显示活动A的进度对话框,然后在加载并显示活动B后关闭?
谢谢
发布于 2013-11-12 18:06:11
您需要实现AsyncTask或simple Java线程化。现在就去找AsyncTask吧。
onPreExecute()
-在此处显示对话框doInBackground()
-调用getTracks()onPostExecute()
-在ListView中显示曲目并关闭对话框例如:
private static class LoadTracksTask extends AsyncTask<Void, Void, Void> {
ProgressDialog progress;
@Override
protected void onPreExecute() {
progress = new ProgressDialog(yourActivity.this);
progress .setMessage("loading");
progress .show();
}
@Override
protected Void doInBackground(Void... params) {
// do tracks loading process here, don't update UI directly here because there is different mechanism for it
return null;
}
@Override
protected void onPostExecute(Void result) {
// write display tracks logic here
progress.dismiss(); // dismiss dialog
}
}
定义完AsyncTask类后,只需通过调用onCreate()
的execute()
方法在AsyncTask中执行任务即可。
例如:
new LoadTracksTask().execute();
发布于 2013-11-12 18:10:40
您可以像这样创建进度对话框:
onPreExecute(){
progressdialog = new ProgressDialog(MainActivity.this);
progressdialog.setMessage("Please wait while downloading application from the web.....");
progressdialog.setIndeterminate(false);
progressdialog.setMax(100);
progressdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressdialog.setCancelable(false);
progressdialog.show();
}
doInBackground(String... strings){
// here you code for downloading
}
onProgressUpdate(String... progress)
{
// here set progress update
progressdialog.setProgress(Integer.parseInt(progress[0]));
}
onPostExecute(String result)
{
progressdialog.dismiss();
}
发布于 2013-11-12 18:12:36
使用类似如下的内容:
private static class MapLoader extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
progress.setVisibility(View.VISIBLE);
// make your element GONE
}
@Override
protected Void doInBackground(Void... params) {
// Load map processing
return null;
}
@Override
protected void onPostExecute(List<Document> result) {
progress.setVisibility(View.GONE);
adapter.setNewData(new_data);
adapter.notifyDataSetChanged();
}
}
在onCreate()中使用:
listView.setAdapter(adapter);
new MapLoader.execute();
https://stackoverflow.com/questions/19926157
复制相似问题