通过应用程序显示ProgressDialogs的最佳实践?

时间:2015-05-09 10:43:03

标签: java android progressdialog

在我的应用程序中,我想在某些事件上显示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

这被认为是好习惯吗?如果没有,我该怎么做?

2 个答案:

答案 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方法。

希望这能回答你的问题。