Aller au contenu

Problème avec un Custom Dialog.


Nanis

Recommended Posts

Bonjour, j'ai un petit soucis dont je n'arrive pas du tout à me défaire.

J'ai actuellement dans mon application une listview comprennant dans chaque ligne une textview et une imageView.

Lorsque je clic qur l'imageView cela m'ouvre un Dialog, dans lequel j'affiches des informations.

Ensuite il y à le choix entre valider les info ou les modifier. Si je clic sur modifier , j'aimerai pouvoir afficher un nouvel écran (et donc appeler une nouvelle activity).

J'ai donc utilisé un Intent mais j'ai pas mal d'erreur, et je ne vois pas d'ou cela vient.

Le log :

05-20 08:17:57.925: ERROR/DEBUGTAG(624): Error occured
05-20 08:17:57.925: ERROR/DEBUGTAG(624): java.lang.NullPointerException
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at com.android.booztermobile.activity.HeaderMailDisplayActivity.onClick(HeaderMailDisplayActivity.java:564)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.view.View.performClick(View.java:2364)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.view.View.onTouchEvent(View.java:4179)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.widget.TextView.onTouchEvent(TextView.java:6540)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.view.View.dispatchTouchEvent(View.java:3709)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.app.Dialog.dispatchTouchEvent(Dialog.java:643)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.os.Looper.loop(Looper.java:123)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at android.app.ActivityThread.main(ActivityThread.java:4363)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at java.lang.reflect.Method.invokeNative(Native Method)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at java.lang.reflect.Method.invoke(Method.java:521)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
05-20 08:17:57.925: ERROR/DEBUGTAG(624):     at dalvik.system.NativeStart.main(Native Method)

Dans l'adapter de ma liste j'ai cela pour pouvoir créer le dialog :

public class MailAdapter extends ArrayAdapter{

   private TextView subject;
   private TextView receiver;
   private TextView sender;
   private TextView date;
   private TextView senderText;
   private TextView receiverText;
   private ImageView imgClassement;

   public MailAdapter(Context context, int textViewResourceId, List mails) {
       super(context, textViewResourceId,mails);        
   }

   public View getView(int position, View convertView, ViewGroup parent) {

       View view = convertView;

       //If view does not exist, we create it
       if (view == null){  

           LayoutInflater li = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           view = li.inflate(R.layout.headermail, null);

       }

       //Create list of mail
       final MailHeader mail = getItem(position);

       subject = (TextView)view.findViewById(R.id.subject);
       receiver = (TextView)view.findViewById(R.id.receiver);
       sender = (TextView)view.findViewById(R.id.sender);
       date = (TextView)view.findViewById(R.id.date);
       senderText = (TextView)view.findViewById(R.id.senderText);
       receiverText = (TextView)view.findViewById(R.id.receiverText);
       imgClassement = (ImageView)view.findViewById(R.id.imgClassement);

       if (mail != null)
       {

           //Looking for classement lvl to display corresponding lights
              int drawable = retrieveClassement(mail.getClassementLvl(), mail.getReaded(), mail.getSenderEmail(), mail.isDraft());
              imgClassement.setImageResource(drawable);
              imgClassement.setTag(mail);
              final HeaderMailDisplayActivity hm = new HeaderMailDisplayActivity();
              imgClassement.setOnClickListener(new View.OnClickListener() {

               @Override
               public void onClick(View v) {
                   hm.getMailInformations(v, getContext());

               }
           });


                  //read or not read ?
               if (mail.getReaded() == BoozterMailConstants.BB_MAIL_TYPE_UNREAD)
               {
                   headerStyle(mail, R.color.black, Typeface.BOLD);
                   senderText.setTypeface(null, Typeface.BOLD);
                   receiverText.setTypeface(null, Typeface.BOLD);

               // mail is draft ?
               }else if(mail.isDraft()){

                   headerStyle(mail, R.color.blue_button_bottom, Typeface.ITALIC);
                   senderText.setTypeface(null, Typeface.ITALIC);
                   receiverText.setTypeface(null, Typeface.ITALIC);

               // mail is read and not draft
               }else{

                   headerStyle(mail, R.color.black, Typeface.NORMAL);
                   senderText.setTypeface(null, Typeface.NORMAL);
                   receiverText.setTypeface(null, Typeface.NORMAL);
               }
       }
       //return view to the activity
       return view;
   }

Dans mon activity je récupére le tag et je lance le dialog : (l'activity est coupée car trop longue)

    public void getMailInformations(View v, Context context){

       currentMail = (MailHeader) v.getTag();

       dial = new MailDialog(context);
       dial.setTitle("Classement");
       dial.show();

       btnValidClassement = (Button) dial.findViewById(R.id.btnValidClassement);
       btnValidClassement.setOnClickListener(this);

   }

Ensuite dans le OnClick :

public void onClick(View view) {

if(view == btnModifyClassement){

           try{

               dial.dismiss();
                               // create Intent
                   Intent defineIntentDisplayPreviousMails = new Intent(view.getContext(), ClassementActivity.class);
                   //Create bundle to pass informations to the other activity
                   Bundle objetbundle = new Bundle();
                   objetbundle.putString("positionList", String.valueOf(positionList));
                   objetbundle.putStringArrayList("currentMails", seqnumList);
                   objetbundle.putString("uidh", uidh);
                   defineIntentDisplayPreviousMails.putExtras(objetbundle);

                   // call headermailDisplayActivity
                   ListActivity.this.startActivity(defineIntentDisplayPreviousMails);

           }catch(Exception e){
               // TODO Auto-generated catch block
               Log.e("DEBUGTAG","Error occured", e);
               e.printStackTrace();
           }



       }

}

Mon dialog :

package com.android.booztermobile.services;

import com.android.booztermobile.R;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;


public class MailDialog extends Dialog {

   private Button btnValid;
   private Button btnBack;
   private Button btnRestore;
   private Button btnModify;
   private Context context;


   public MailDialog(Context cont) {
       super(cont);
       context = cont;
       }

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       Log.d("TestApp", "Dialog created");
           setContentView(R.layout.dialog_classement);        

           btnValid = (Button) findViewById(R.id.btnValidClassement);
           btnBack = (Button) findViewById(R.id.btnBackClassement);    
           btnRestore = (Button) findViewById(R.id.btnRestoreClassement);
           btnModify = (Button) findViewById(R.id.btnModifyClassement);

   }
}

J'ai essayer plusieurs méthodes rien ne vas... je commence à me dire que ce n'est pas possible :/

Lien vers le commentaire
Partager sur d’autres sites

oui j'ai résolu le soucis en mettant

view.getContext().startActivity(defineIntent);

Je ne comprend pas trop pourquoi, je suppose que comme c'set un bouton appartenant à mon Dialog, le this est faussé ?

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...