0

我有一个列表视图的活动。当我调用此活动时,该活动大约需要 3-5 秒才能出现并显示列表视图。看起来好像没有按下按钮来加载活动,我想在加载时显示一个进度对话框,但无法弄清楚。

ProgressDialog progress;
    progress = ProgressDialog.show(this, "Loading maps!",
        "Please wait...", true);


    // sort out track array
    getTracks();

            progress.dismiss();

我使用列表视图在活动的 oncreate() 上执行了上述操作,但对话框从未显示?

我想要的是在按下按钮时在 Activity A 上显示进度对话框,然后在加载并显示 Activity B 后关闭?

谢谢

4

3 回答 3

1

您需要实现 AsyncTask 或简单的 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-12T10:06:11.283 回答
0

您可以像这样进行进度对话框:

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-12T10:10:39.723 回答
0

使用这样的东西:

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();
于 2013-11-12T10:12:35.913 回答