2017-10-18 3 views
0

J'ai essayé d'utiliser ce qui suit pour créer une classe et l'exécuter à partir d'une fonction qui est en dehors deCreate mais j'essaie de l'exécuter, j'obtiens toujours une erreur d'exception. J'ai googlé et essayé pendant une journée entière sans résultats. Est-ce que quelqu'un pourra m'aider à comprendre comment exécuter la classe suivante à partir d'une méthode en dehors de onCreate? Il fonctionne très bien si je l'appelle dans Create. Merci.Accès à l'interface utilisateur à partir de méthodes en dehors de onCreate

runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
     Dialog x = new Dialog(); 
     x.showDialog(this, act0, "restart0"); 
} 
}); 


//Dialog class 
package com.calmchess.game1; 

import android.app.Activity; 
import android.content.Context; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 

/** 
* Created by bobsmithzero on 10/16/17. 
*/ 

public class Dialog extends Activity{ 


    public void showDialog(final Context context, final Activity act00, final String dialogId0) { 

     switch (dialogId0) { 


      case ("pause0"): 
       Button paBtn0 = (Button) act00.findViewById(R.id.pabtn0); 
       paBtn0.setOnClickListener(new View.OnClickListener() { 


        public void onClick(View v) { 


         //set up pause dialog 
         final android.app.Dialog dialog0 = new android.app.Dialog(context); 
         dialog0.setContentView(R.layout.activity_controls); 
         dialog0.setCancelable(true); 

         Globals.pause0 = true; 


         Button button = (Button) dialog0.findViewById(R.id.pasbtn0); 
         button.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 


           dialog0.cancel(); 
           Globals.pause0 = false; 
          } 
         }); 

         Button reBtn0 = (Button) dialog0.findViewById(R.id.rebtn0); 
         reBtn0.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 

           Restart restart0 = new Restart(); 
           restart0.doRestart(context); 
          } 
         }); 


         dialog0.show(); 
        } 

       }); 

       break; 


      case ("restart0"): 
       Log.e("error","this thAT"); 
       //set up pause dialog 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         //set up pause dialog 
         android.app.Dialog dialog1 = new android.app.Dialog(context); 


         dialog1.setContentView(R.layout.activity_restart); 
         dialog1.setCancelable(true); 

         Globals.pause0 = true; 


         Button button = (Button) dialog1.findViewById(R.id.restart0); 
         button.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 


           Restart restart0 = new Restart(); 
           restart0.doRestart(context); 
          } 
         }); 


         dialog1.show(); 

        } 
       }); 
       break; 
     } 



    } 
} 
+0

Votre classe 'Dialog' ne devrait pas étendre' Activity' si elle n'est pas utilisée comme une 'Activity'. Vous pouvez également le renommer pour éviter toute confusion avec la classe 'Dialog' d'Android. –

+0

vous auriez vraiment avantage à nommer vos trucs avec des noms plus appropriés et à utiliser des logs efficaces. – JoxTraex

Répondre

0

Dans

x.showDialog(this, act0, "restart0"); 

this est votre instance Runnable. Remplacez this par l'instance de contexte correcte. YourActivity.this comme exemple.

+0

J'ai essayé cela mais j'ai toujours l'exception de pointeur nul x.showDialog (Main0.this, act0000, "restart0"); À cette ligne dans la classe android.app.Dialog dialog1 = new android.app.Dialog (context); – calmchess

+0

Dans 'dialog1 = new android.app.Dialog (context);' seul 'context' pourrait être nul, il n'y a pas d'autres possibilités. Vérifiez-le et trouvez la source de null dans la variable 'context'. –