我有处理大量进度对话框的 android 应用程序。我必须为每个活动创建一个单独的对话框。
对话框创建在构建时将活动(上下文)作为参数。
有没有一种方法可以让我创建一个对话框(它与应用程序而不是活动相关联)并在不同的活动中显示它,这样我就不必重复创建它。
我有处理大量进度对话框的 android 应用程序。我必须为每个活动创建一个单独的对话框。
对话框创建在构建时将活动(上下文)作为参数。
有没有一种方法可以让我创建一个对话框(它与应用程序而不是活动相关联)并在不同的活动中显示它,这样我就不必重复创建它。
声明showProgressDialog
并hideProgressDialog
在 Utill 助手类中,如以下代码片段所示
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 的活动中调用,例如在onPreExecute()
AsyncTask 类的方法中,如下面的代码片段所示
ProgressDialog pDialog = Util.showProgressDialog(this);
并使用以下代码隐藏progressDialog
Util.hideProgressDialog(pDialog);
将对话框代码放入帮助类的静态方法中接收 Context 可能是最好的方法。
抱歉不行。您必须将对话框附加到活动,否则您的应用程序将趋于崩溃。例如,您可能会遇到异常android.view.WindowManager$BadTokenException
。
这不是您问题的真正答案,但也许我的想法对您有所帮助。我创建了一个 BaseActivity,有一个成员对话框,作为成员的活动上下文和两种方法,用于显示和隐藏进程对话框。所有其他活动都是从它扩展而来的。
如果您只想在对话框中定义 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>