android singleton dialog
I have android applicatio开发者_如何学运维n which deals with lot of progress dialogs.I have to create a separate dialog for each activity.
Dialog creation takes a activity(context) as parameter while constructing.
Is there a way by which I can create a single dialog (which is tied to application and not the activity) and show it in different activity so that I do not have to create it repeatedly.
Declare showProgressDialog
and hideProgressDialog
in Utill helper class as shown in following code snippet
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();
}
Then call from activity where you need to show the ProgressDialog for example in onPreExecute()
method of AsyncTask class as shown in below code snippet
ProgressDialog pDialog = Util.showProgressDialog(this);
and use following code to hide the progressDialog
Util.hideProgressDialog(pDialog);
Putting dialog code into a helper class's static method receiving a Context maybe the best way.
Unfortunately, no. You have to attach the dialog to an activity, otherwise your application will tend to crash. You could get exceptions like android.view.WindowManager$BadTokenException
for instance.
It's not really the answer for your question, but maybe my idea helps you. I've created a BaseActivity, there is a member dialog, activity context as member and two methods, to show and to hide progess dialog. All other activities are extended from it.
If you want ProgressBar only in the dialog define this class
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();
}
}
}
and this XML in layout folder
<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>
and this style in 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>
精彩评论