[英]Best practice to show ProgressDialogs through an application?
在我的应用程序中,我想显示某些事件的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
。
这被认为是好的做法吗? 如果没有,我应该怎么做?
您正在寻求最佳实践。 实际上,最佳实践是不使用ProgressDialog
,因为它们会阻止用户与应用程序进行交互。
有许多不使用ProgressDialog
。
如果您的应用正在加载列表所需的数据,请放置一个Spinner
而不是ListView。
有关此主题的其他更多信息,请参见此处: Google设计指南:进度
如果您仍然想使用ProgressDialog
我强烈建议您不要使用上面发布的类。 它拥有对progressDialog
的static
引用,因此它是所有活动和活动周期之上的全局引用。 如果您的应用程序被重新创建或其他原因,可能会导致一些麻烦。
我建议您使用一个非static
ProgressDialogHelper
您可以为每个Activity
初始化,然后将处理该Dialog
。 还要确保处理诸如onDestroy
生命周期方法
可以使用@jagmohan指出的BaseActivity,但是如果您不想拥有自己的BaseActivity并希望使用某些东西作为插入对象,则可以创建以下内容:
ProgressDialogHelper.java
public class ProgressDialogHelper {
ProgressDialog mProgressDialog;
public ProgressDialogHelper() {
}
public ProgressDialogHelper(Context context, String title, String message) {
mProgressDialog = new ProgressDialog(context);
mProgressDialog.setTitle(title);
mProgressDialog.setMessage(message);
mProgressDialog.show();
}
public ProgressDialog getProgressDialog() {
return mProgressDialog;
}
public void setProgressDialog(ProgressDialog mProgressDialog) {
//make sure the previous dialog is hidden
hide();
this.mProgressDialog = mProgressDialog;
}
public void show() {
if (mProgressDialog != null && !mProgressDialog.isShowing()) {
mProgressDialog.show();
}
}
public void create(Context context, String title, String message) {
if (mProgressDialog != null) {
mProgressDialog.dismiss();
}
mProgressDialog = ProgressDialog.show(context, title, message);
}
public void hide() {
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
mProgressDialog = null;
}
}
public void onDestroy() {
hide();
}
}
正如@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方法即可。
希望这能回答您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.