android单例对话框

时间:2010-11-26 16:04:51

标签: android progressdialog

我有android应用程序处理很多进度对话框。我必须为每个活动创建一个单独的对话框。

对话框创建在构造时将活动(上下文)作为参数。

有没有办法可以创建一个单独的对话框(与应用程序而不是活动相关联)并在不同的活动中显示它,这样我就不必重复创建它。

5 个答案:

答案 0 :(得分:5)

在Utill帮助程序类中声明showProgressDialoghideProgressDialog,如以下代码段所示

public static ProgressDialog showProgressDialog(Context context) {
        ProgressDialog pDialog = new ProgressDialog(context);
        pDialog.setMessage("Please wait...");
        pDialog.setCancelable(false);
        pDialog.show();
        return pDialog;
    }

    public static void hideProgressDialog(ProgressDialog pDialog) {
        if (pDialog.isShowing())
            pDialog.dismiss();
    }

然后从需要在AsyncTask类的onPreExecute()方法中显示ProgressDialog的活动中调用,如下面的代码片段所示

ProgressDialog pDialog = Util.showProgressDialog(this);

并使用以下代码隐藏progressDialog

 Util.hideProgressDialog(pDialog);

答案 1 :(得分:4)

将对话框代码放入辅助类的接收上下文的静态方法可能是最好的方法。

答案 2 :(得分:2)

不幸的是,没有。您必须将对话框附加到活动,否则您的应用程序将崩溃。例如,您可以获得android.view.WindowManager$BadTokenException等异常。

答案 3 :(得分:2)

这不是你问题的答案,但也许我的想法会帮助你。我创建了一个BaseActivity,有一个成员对话框,活动上下文作为成员和两个方法,用于显示和隐藏progess对话框。所有其他活动都从中扩展。

答案 4 :(得分:0)

如果只想在对话框中定义ProgressBar,请定义此类

    public class ProgressDialog {
    private Dialog dialog;
    private static ProgressDialog mInstance;

    public static synchronized ProgressDialog getInstance() {
        if (mInstance == null) {
            mInstance = new ProgressDialog();
        }
        return mInstance;
    }

    public void show(Context context) {
        if (dialog != null && dialog.isShowing()) {
            return;
        }
        dialog = new Dialog(context,R.style.ProgressDialog);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.layout_progress_dialog);
        dialog.setCancelable(false);
        dialog.show();
    }

    public void dismiss() {
        if (dialog != null && dialog.isShowing()) {
            dialog.dismiss();
        }
    }
}

和布局文件夹中的这个XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:progressDrawable="@drawable/progress"
        android:id="@+id/progress" />

</LinearLayout>

和style.xml中的这个样式

<style name="ProgressDialog" parent="Animation.AppCompat.Dialog">
        <item name="colorAccent">@color/colorPrimary</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowTitleStyle">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:background">@android:color/transparent</item>
    </style>