2010-11-26 22 views
4

J'ai une application Android qui traite de beaucoup de dialogues de progression. Je dois créer un dialogue séparé pour chaque activité.android singleton dialogue

La création de dialogues prend une activité (contexte) comme paramètre lors de la construction.

Y a-t-il un moyen par lequel je peux créer une seule boîte de dialogue (qui est liée à l'application et non à l'activité) et l'afficher dans une activité différente afin de ne pas avoir à la créer plusieurs fois.

Répondre

2

Malheureusement, non. Vous devez attacher la boîte de dialogue à une activité, sinon votre application aura tendance à planter. Vous pourriez obtenir des exceptions comme android.view.WindowManager$BadTokenException par exemple.

4

Mettre le code de dialogue dans la méthode statique d'une classe d'assistance en recevant un contexte peut-être le meilleur moyen.

2

Ce n'est pas vraiment la réponse à votre question, mais peut-être que mon idée vous aide. J'ai créé une BaseActivity, il y a un dialogue membre, un contexte d'activité en tant que membre et deux méthodes, pour afficher et masquer le dialogue de progression. Toutes les autres activités en sont prolongées.

3

Déclarer showProgressDialog et hideProgressDialog en classe aide utill comme indiqué dans la suite extrait de code

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

Ensuite, appelez de l'activité où vous devez montrer l'ProgressDialog par exemple dans la méthode onPreExecute() de classe AsyncTask comme indiqué dans l'extrait de code ci-dessous

ProgressDialog pDialog = Util.showProgressDialog(this); 

et utilisez le code ci-dessous pour cacher la ProgressDialog

Util.hideProgressDialog(pDialog); 
+0

Merci, il est travail .. –

+0

Puis Up-vote It: D –

+0

Déjà fait ..;) –

0

Si vous voulez ProgressBar que dans la boîte de dialogue définir cette classe

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

et ce XML dans le dossier de mise en page

<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> 

et ce style dans 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>