【问题标题】:android singleton dialogandroid单例对话框
【发布时间】:2010-11-26 16:04:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: android progressdialog


    【解决方案1】:

    在 Utill 助手类中声明 showProgressDialoghideProgressDialog 如下代码 sn -p

    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();
        }
    

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

    ProgressDialog pDialog = Util.showProgressDialog(this);
    

    并使用以下代码隐藏progressDialog

     Util.hideProgressDialog(pDialog);
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        很遗憾,没有。您必须将对话框附加到活动,否则您的应用程序将趋于崩溃。例如,您可能会遇到 android.view.WindowManager$BadTokenException 之类的异常。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            如果你只想在对话框中定义这个类

                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>
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-07-20
              • 2011-08-24
              • 1970-01-01
              • 1970-01-01
              • 2011-08-20
              • 1970-01-01
              • 2021-11-04
              相关资源
              最近更新 更多