在我的应用程序中,我想在某些事件上显示ProgressDialog
(例如在AsyncTasks
期间)。我从不想同时展示多个ProgressDialogs
。
最好和最有效的方法是什么? 我目前的代码如下:
public class ProgressDialogHelper {
private static ProgressDialog progressDialog;
public static void showProgressDialog(Context c) {
if (progressDialog == null) {
progressDialog = ProgressDialog.show(c, null, null);
progressDialog.setContentView(R.layout.progress_bar);
}
}
public static void dismissProgressDialog() {
if (progressDialog != null) {
progressDialog.dismiss();
progressDialog = null;
}
}
}
我从其他类调用这些方法来显示/关闭ProgressDialog
。
这被认为是好习惯吗?如果没有,我该怎么做?
答案 0 :(得分:6)
您正在寻求最佳实践。事实上,最佳做法是不使用0
,因为它们会阻止用户与应用程序进行交互。
有很多选择不使用ProgressDialog
。
如果您的应用正在加载列表所需的数据,请放置ProgressDialog
而不是ListView。
有关本主题的其他内容,请参阅此处:Google Design Guidelines: Progress
如果您仍想使用Spinner
,我强烈建议您不要使用上面发布的课程。它包含对ProgressDialog
的{{1}}引用,因此它在所有活动和实时循环之上是全局的。如果您的应用程序被重新创建或其他东西,这可能会导致一些麻烦。
我建议您使用非static
progressDialog
初始化每个static
,然后这个会处理ProgressDialogHelper
。还要确保处理像Activity
将@Aagmohan注册为BaseActivity是可能的,但是如果您不想拥有自己的BaseActivity并希望使用某些内容,那么您可以创建这样的内容:
<强> ProgressDialogHelper.java 强>
Dialog
答案 1 :(得分:3)
正如@mikepenz所指出的,在最新的设计指南中不鼓励使用ProgressDialogs。但是,这里有一些对我来说很有用的东西。
我曾经设置了一个基础Activity
,并添加了几种方法来隐藏和显示该类中的进度对话框。
public class BaseActivity extends ActionBarActivity {
protected static final String TAG = BaseActivity.class.getSimpleName();
protected ProgressDialog mProgressDialog;
protected void showProgressDialog(String title, String message) {
if (mProgressDialog != null) {
mProgressDialog.dismiss();
}
mProgressDialog = ProgressDialog.show(this, title, message);
}
protected void hideProgressDialog() {
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
mProgressDialog = null;
}
}
@Override
protected void onStop() {
super.onStop();
// hide progress dialog to prevent leaks
hideProgressDialog();
}
// other stuff...
}
现在,您可以在项目中创建的新活动类中扩展此基本活动,并使用这些方法显示/隐藏进度对话框。
顺便说一下,只需确保从UI线程调用show / hide方法。
希望这能回答你的问题。