首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >列表视图的Android进度对话框

列表视图的Android进度对话框
EN

Stack Overflow用户
提问于 2013-11-12 18:03:56
回答 3查看 3.3K关注 0票数 0

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

代码语言:javascript
运行
复制
ProgressDialog progress;
    progress = ProgressDialog.show(this, "Loading maps!",
        "Please wait...", true);


    // sort out track array
    getTracks();

            progress.dismiss();

我使用listview对活动的oncreate()执行了上述操作,但是对话框从未显示过吗?

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

谢谢

EN

回答 3

Stack Overflow用户

发布于 2013-11-12 18:06:11

您需要实现AsyncTask或simple Java线程化。现在就去找AsyncTask吧。

  • onPreExecute() -在此处显示对话框
  • doInBackground() -调用getTracks()
  • onPostExecute() -在ListView中显示曲目并关闭对话框

例如:

代码语言:javascript
运行
复制
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中执行任务即可。

例如:

代码语言:javascript
运行
复制
new LoadTracksTask().execute();
票数 1
EN

Stack Overflow用户

发布于 2013-11-12 18:10:40

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

代码语言:javascript
运行
复制
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();
}
票数 0
EN

Stack Overflow用户

发布于 2013-11-12 18:12:36

使用类似如下的内容:

代码语言:javascript
运行
复制
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()中使用:

代码语言:javascript
运行
复制
listView.setAdapter(adapter);
new MapLoader.execute();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19926157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档