Nanis Posté(e) 20 mai 2010 Share Posté(e) 20 mai 2010 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 More sharing options...
Nivek Posté(e) 20 mai 2010 Share Posté(e) 20 mai 2010 C'est quoi la ligne 564 ou tu as l'exception ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nanis Posté(e) 21 mai 2010 Auteur Share Posté(e) 21 mai 2010 c'est rapport à l'intent : ListActivity.this.startActivity(defineIntentDisplayPreviousMails); Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 21 mai 2010 Share Posté(e) 21 mai 2010 Si c'est ça ta ligne 564 (au moment de l'exception que tu nous as fournie), alors ton "this" est null.... ça m'étonnerait... Tu es sûr ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nanis Posté(e) 21 mai 2010 Auteur Share Posté(e) 21 mai 2010 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 More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.