2012-02-02 9 views
1

J'essaie de lancer une boîte de dialogue personnalisée à partir d'un appui sur un bouton dans une boîte de dialogue d'alerte. L'utilisateur appuie sur un bouton dans l'interface utilisateur principale qui ouvre le redeemAlertDialog, cette boîte de dialogue demande à l'utilisateur s'il est certain qu'il souhaite poursuivre cette action. Si elles cliquent sur "Oui", je veux ouvrir ma boîte de dialogue personnalisée. Cependant, le lancement de ma boîte de dialogue personnalisée provoque le blocage de l'application. Logcat me dit que j'ai une erreur de pointeur null sur la ligne * text.setText ("Blah Blah"/merchantName /); *, mais si je commente sur cette ligne, je reçois la même erreur sur la ligne button.setOnClickListener (new OnClickListener() { Si je commente ces deux lignes, alors ça marche.Après avoir creusé, je pense que mon problème est lié au contexte auquel j'associe mon dialogue personnalisé quand je le crée, mais je n'ai pas t été en mesure de le réparer. Si quelqu'un pouvait indiquer où je vais mal, je vous serais reconnaissant. mon code est ci-dessous.Lancer la boîte de dialogue personnalisée à partir de la boîte de dialogue Alerte - Erreur NullPointer

SOLVED Dans ma méthode onCreate a changé ma définition de mContext de m Contexte = getApplicationContext(); à mContext = this; Pour certaines raisons, couponDialog = new Dialog (mContext); n'a pas aimé ce qu'il était donné par getApplicationContect();

private void redeem() { 
    AlertDialog.Builder redeemAlerDialogBuilder = new AlertDialog.Builder(this); 
    redeemAlerDialogBuilder.setMessage("Are you sure you want to redeem?") 
      .setCancelable(false) //User must select a button, can't use the back button 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        //Do something to launch a redeem dialog 
        //openCouponDialog(); 
        couponDialog = new Dialog(mContext); 
        couponDialog.setContentView(R.layout.redeem_layout); 
        couponDialog.setTitle("Freebie Coupon"); 
        couponDialog.setCancelable(false); //User should only be able to exit dialog by clicking done 

        TextView text = (TextView) findViewById(R.id.redeemMerchantName); 
        text.setText("Blah Blah"/*merchantName*/); 

        ImageView image = (ImageView) findViewById(R.id.couponImage); 
        //Set merchant coupon image here - need to download this from server when merchant is first added 

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

        couponDialog.show(); 
       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() {    
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); //Cancel redeem     
      } 
     }); 
    redeemAlertDialog = redeemAlerDialogBuilder.create(); 
    redeemAlertDialog.show(); 
} 
+0

findViewById (...) retour null qui est à l'origine NullPointerException. pouvez-vous poster plus de code d'où vous appelez cette boîte de dialogue? – kosa

+0

J'appelle couponDialog de redeemAlertDialog. Vous pouvez voir couponDialog.show() à la fin de redeemAlertDialog.setPositiveButton – Roardog

Répondre

3

Au lieu de:

Button button = (Button) findViewById(R.id.redeemDialogCloseButton); 

TextView text = (TextView) findViewById(R.id.redeemMerchantName); 

utilisation

Button button = (Button) couponDialog.findViewById(R.id.redeemDialogCloseButton); 
TextView text = (TextView) couponDialog.findViewById(R.id.redeemMerchantName); 

espère que cela fonctionne

+0

Merci Chris mais ça n'a pas fonctionné j'ai peur. Il a changé l'erreur que j'ai eu à "Impossible d'ajouter la fenêtre - le token null n'est pas pour une application" – Roardog

+0

couponDialog = new Dialog (mContext); Où est mContext et que vous demande-t-il? Utilisez-le ou utilisez l'activité de base – Chris

+0

Résolu. Pour une raison quelconque, getApplicationContext() ne renvoyait pas quelque chose que le nouveau Dialog() pouvait utiliser. Dans ma méthode onCreate(), j'ai changé mContext = getApplicationContext(); à mContext = this; et maintenant ça marche – Roardog

Questions connexes