首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处置ProgressDialog

处置ProgressDialog
EN

Stack Overflow用户
提问于 2011-09-19 07:25:18
回答 2查看 557关注 0票数 1

我使用ProgressDialog在线程运行时显示微调器。当线程完成时,该对话框会从视图中移除,并将另一个活动推送到堆栈上。问题是,该对话框未被处理。当我返回到活动(弹出堆栈)并返回到前一个活动时,ProgressDialog的相同实例正在被调用(当被要求显示对话框时)。

创建对话框:

代码语言:javascript
复制
protected Dialog onCreateDialog(int id) { 

 progDialog = new ProgressDialog(this);
 progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
 progDialog.setMessage("Searching for ..." + txtPart.getText().toString());
 // Start thread            
 progThread = new AcmXmlSearchHelper(handler, txtTitle.getText().toString(), txtPart.getText().toString(), txtSection.getText().toString(), this);
 progThread.start();
 return progDialog;

}

显示对话框:

代码语言:javascript
复制
showDialog(getProgressId()); 

关闭对话框:

代码语言:javascript
复制
dismissDialog(getProgressId());  

简单的解决方案是使用唯一的id调用ProgressDialog (showDialog())。但是,我不认为这是对内存的良好使用。我可以在内存中挂起一些对话框。如何确保对象已被释放?

Thx

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-19 09:00:51

创建一个嵌套的AsyncTask类可能会为您理清思路:

代码语言:javascript
复制
private static class MyTask extends AsyncTask<Void, Void, Void> {

           protected void onPreExecute() {
               // Show dialog here - note: showDialog is depricated.
           }

            protected Void doInBackground(Void... unused) {
                    // do the stuff that's in your thread here.
                    return null;
            }

            protected void onPostExecute(Void unused) {
                    // Dismiss dialog here - note: dismissDialog is depricated.
            }
} 
票数 2
EN

Stack Overflow用户

发布于 2012-04-05 16:44:54

解决方案是使用removeDialog(id)而不是dismissDialog(id)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7465144

复制
相关文章

相似问题

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