您要求的是最佳实践。事实上,最好的做法是不要使用ProgressDialogs,因为它们会阻止用户与应用程序交互。
有很多不使用ProgressDialog 的替代方法。
如果您的应用正在加载列表所需的数据,请放置 Spinner 而不是 ListView。
有关此主题的其他阅读内容,请参见此处:Google Design Guidelines: Progress
如果您仍想使用ProgressDialog,我强烈建议您不要使用您在上面发布的课程。它拥有一个static 对progressDialog 的引用,因此它在所有活动和生命周期中都是全局的。如果您的应用程序被重新创建或其他,这可能会导致一些麻烦。
我会推荐一个非 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();
}
}