2016-03-28 7 views
0

J'utilise une animation personnalisée pour afficher la boîte de dialogue de progression. Elle plante parfois avec cette erreur. Comment puis-je résoudre ce problème dans la classe personnalisée?boîte de dialogue de progression personnalisée plante

Erreur:

Unable to add window -- token [email protected] is not valid; is your activity running? 

code:

public class MyCustomProgressDialog extends ProgressDialog { 
    private AnimationDrawable animation; 

    public static ProgressDialog ctor(Context context) { 
     MyCustomProgressDialog dialog = new MyCustomProgressDialog(context); 

     dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(false); 
     return dialog; 
    } 

    public MyCustomProgressDialog(Context context) { 
     super(context); 
    } 

    public MyCustomProgressDialog(Context context, int theme) { 
     super(context, theme); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_custom_progress_dialog); 

     ImageView la = (ImageView) findViewById(R.id.animation); 
     la.setBackgroundResource(R.drawable.custom_progress_dialog_animation); 
     animation = (AnimationDrawable) la.getBackground(); 
    } 

    @Override 
    public void show() { 
     super.show(); 
     animation.start(); 
    } 

    @Override 
    public void dismiss() { 
     super.dismiss(); 
     animation.stop(); 
    } 
} 

Edit 2:

public class MyCustomProgressDialog extends ProgressDialog { 
    private AnimationDrawable animation; 

    Context ctx; 

    public ProgressDialog ctor(Context context) { 
     ctx= context; 

     MyCustomProgressDialog dialog = new MyCustomProgressDialog(context); 

     dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(false); 
     return dialog; 
    } 

    public MyCustomProgressDialog(Context context) { 
     super(context); 
     ctx= context; 
    } 

    public MyCustomProgressDialog(Context context, int theme) { 
     super(context, theme); 
     ctx= context; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_custom_progress_dialog); 

     ImageView la = (ImageView) findViewById(R.id.animation); 
     la.setBackgroundResource(R.drawable.custom_progress_dialog_animation); 
     animation = (AnimationDrawable) la.getBackground(); 
    } 

    @Override 
    public void show() { 

     if(!((Activity) ctx).isFinishing()) 
     { 
      //show dialog 

      super.show(); 
      animation.start(); 
     } 
    } 

    @Override 
    public void dismiss() { 
     super.dismiss(); 
     animation.stop(); 
    } 
} 
+1

Copie possible de [Impossible d'ajouter la fenêtre - token android.os.BinderProxy n'est pas valide; votre activité est-elle en cours?] (http://stackoverflow.com/questions/9529504/unable-to-add-window-token-android-os-binderproxy-is-not-valid-is-your-activ) –

Répondre

1

lorsque l'activité appelant la boîte de dialogue a été finition pour une raison ou une autre quand il a essayé de montrer un dialogue. Voici ce que j'ai résolu pour moi:

if(!((Activity) context).isFinishing()) 
{ 
    dialog.show(); 
} 

Vérifiez simplement que votre activité est terminée ou non, puis implémentez la boîte de dialogue.

+0

Comment J'ai ajouté ce code dans ma classe personnalisée? – jason

+0

@jason visitez ce http://blackriver.to/2012/08/android-annoying-exception-unable-to-add-window-is-your-activity-running/ –

+0

J'ai ajouté un nouveau code dans edit 2. Est-ce que ça va marcher ? – jason