Gabin Posté(e) 26 février 2011 Share Posté(e) 26 février 2011 Bonjour, Je me trouve face à un problème mais je n'arrive pas à voir comment le résoudre. Je souhaite proposer une ListView dans une AlertDialog mais je me retrouve avec un NullPointerException. Voici le bout de code en question qui se trouve dans mon main : //Récupération de la listview créée dans le fichier main.xml ListView maListViewPerso = (ListView) findViewById(R.id.lv_Reglage); //Création de la ArrayList qui nous permettra de remplire la listView ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>(); //On déclare la HashMap qui contiendra les informations pour un item HashMap<String, String> map; //Création d'une HashMap pour insérer les informations du premier item de notre listView map = new HashMap<String, String>(); //on insère un élément titre que l'on récupérera dans le textView titre créé dans le fichier affichageitem.xml map.put("titreReg", "Profil"); //on insère un élément description que l'on récupérera dans le textView description créé dans le fichier affichageitem.xml map.put("descriptionReg", "Gérer votre profil"); //on insère la référence à l'image (convertit en String car normalement c'est un int) que l'on récupérera dans l'imageView créé dans le fichier affichageitem.xml map.put("imgReg", String.valueOf(R.drawable.boutonrondprofil)); //enfin on ajoute cette hashMap dans la arrayList listItem.add(map); //On refait la manip plusieurs fois avec des données différentes pour former les items de notre ListView map = new HashMap<String, String>(); map.put("titreReg", "Option"); map.put("descriptionReg", "régler les options"); map.put("imgReg", String.valueOf(R.drawable.boutonrondreglage)); listItem.add(map); //Création d'un SimpleAdapter qui se chargera de mettre les items présent dans notre list (listItem) dans la vue affichageitem SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.affreglage, new String[] {"imgReg", "titreReg", "descriptionReg"}, new int[] {R.id.imgReg, R.id.titreReg, R.id.descriptionReg}); //On attribut à notre listView l'adapter que l'on vient de créer maListViewPerso.setAdapter(mSchedule); /* J'ai le problème lorsque cette ligne est appelée. Si je la squizz avec un double slash je n'ai plus de pb */ Voici le fichier XML de mon AlertDialog : <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="15px"> <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/adReglage_titre" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="10dip" android:text="@string/st_adReglage_titre" android:textColor="#fff" android:textSize="30sp" android:textStyle="bold" /> <ListView android:id="@+id/lv_Reglage" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> </ScrollView> </RelativeLayout> Merci à vous :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sakaroz Posté(e) 26 février 2011 Share Posté(e) 26 février 2011 Elle se situe où ton exception ? Quelle ligne ? Sinon, pour le XML de ton alertDialog, c'est un peu bizarre de de mettre une ListView (qui scroll par défaut) dans une scrollview non ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Gabin Posté(e) 26 février 2011 Auteur Share Posté(e) 26 février 2011 Pour l'erreur en effet je l'ai indiquée mais il y a tellement de commentaires dans mon code ^^ Du coups l'erreur se situe lorsque j'appelle la dernière ligne du bout de code de mon main. Et pour le coup de la ScrollView en effet je n'avais pas fais gaffe. En fait j'ai fais un bête copier/coller d'un autre XML d'une autre de mes alertDialog. Je vais rectifier tout ça ! Merci pour ton aide. Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 28 février 2011 Share Posté(e) 28 février 2011 2 petites interrogations: - tu parles d'un AlertDialog.xml, mais dans ton code, tu indiques aller chercher la ListView dans le main.xml. Parles-tu de la même chose ? - tu construits une Map avec des valeurs associées aux clés "titre", "descritpion" et "img", et quand tu construits le SimpleAdapter, tu indiques les valeurs "titreReg", "descriptionReg" et "imgReg". Les noms devraient être les mêmes des 2 cotés Si cela ne résout pas le problème, peux-tu mettre la stacktrace de ton exception ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Gabin Posté(e) 28 février 2011 Auteur Share Posté(e) 28 février 2011 Alors oui en effet j'avais oublié de corriger mais les valeurs sont bien titreReg, descriptionReg et imgReg. Sinon pour la récupération de ma ListView, elle est en effet dans le fichier alertreglage.xml. Je pensais qu'en appelant l'id de ma ListView (même si mon activité est définie avec mon mail.xml), cela ne poserait pas de problèmes... Comment devrais-je m'y prendre du coups pour arriver à récupérer ma ListView ? Sinon voici mon erreur : 02-28 11:50:FATAL EXCEPTION: main 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.mecadev.empdtps.univorleans/net.mecadev.empdtps.univorleans.Main}: java.lang.NullPointerException 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at android.os.Handler.dispatchMessage(Handler.java:99) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at android.os.Looper.loop(Looper.java:123) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at android.app.ActivityThread.main(ActivityThread.java:4627) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at java.lang.reflect.Method.invokeNative(Native Method) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at java.lang.reflect.Method.invoke(Method.java:521) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at dalvik.system.NativeStart.main(Native Method) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): Caused by: java.lang.NullPointerException 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at net.mecadev.empdtps.univorleans.Main.onCreate(Main.java:393) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 02-28 11:50:49.054: ERROR/AndroidRuntime(18091): ... 11 more Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 28 février 2011 Share Posté(e) 28 février 2011 Comment devrais-je m'y prendre du coups pour arriver à récupérer ma ListView ? En implémentant ce code non pas dans le onCreate de ton Activity, mais dans le onCreate de ton AlertDialog Lien vers le commentaire Partager sur d’autres sites More sharing options...
Gabin Posté(e) 28 février 2011 Auteur Share Posté(e) 28 février 2011 Je devrais donc faire comme cela : onCreateDialog (dans mon mail.xml) : protected Dialog onCreateDialog(int id) { Dialog dlg; switch (id) { case dial_Reglage: { AlertDialog.Builder alertReglageBuilder = new AlertDialog.Builder(this); LayoutInflater factory2 = LayoutInflater.from(this); final View alertReglageView = factory2.inflate(R.layout.alertreglage, null); alertReglageBuilder.setView(alertReglageView); ListView maListViewPerso = (ListView) findViewById(R.id.lv_Reglage); ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>(); HashMap<String, String> map; map = new HashMap<String, String>(); map.put("titreReg", "Profil"); map.put("descriptionReg", "Gérer votre profil"); map.put("imgReg", String.valueOf(R.drawable.boutonrondprofil)); listItem.add(map); map = new HashMap<String, String>(); map.put("titreReg", "Option"); map.put("descriptionReg", "régler les options"); map.put("imgReg", String.valueOf(R.drawable.boutonrondreglage)); listItem.add(map); SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.affreglage, new String[] {"imgReg", "titreReg", "descriptionReg"}, new int[] {R.id.imgReg, R.id.titreReg, R.id.descriptionReg}); maListViewPerso.setAdapter(mSchedule); dlg = alertReglageBuilder.create(); break; } default: dlg = null; } return dlg; } Je me retrouve avec ça lorsque je clic sur le bouton qui doit afficher mon alertDialog : 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): FATAL EXCEPTION: main 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): java.lang.NullPointerException 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at net.mecadev.empdtps.univorleans.Main.onCreateDialog(Main.java:482) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at android.app.Activity.onCreateDialog(Activity.java:2472) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at android.app.Activity.createDialog(Activity.java:881) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at android.app.Activity.showDialog(Activity.java:2547) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at android.app.Activity.showDialog(Activity.java:2514) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at net.mecadev.empdtps.univorleans.Main$3.onClick(Main.java:321) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at android.view.View.performClick(View.java:2461) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at android.view.View$PerformClick.run(View.java:8890) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at android.os.Handler.handleCallback(Handler.java:587) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at android.os.Handler.dispatchMessage(Handler.java:92) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at android.os.Looper.loop(Looper.java:123) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at android.app.ActivityThread.main(ActivityThread.java:4627) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at java.lang.reflect.Method.invokeNative(Native Method) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at java.lang.reflect.Method.invoke(Method.java:521) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 02-28 12:26:01.929: ERROR/AndroidRuntime(18573): at dalvik.system.NativeStart.main(Native Method) Qu'est ce que je n'ai pas pigé ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 28 février 2011 Share Posté(e) 28 février 2011 Remplace la ligne ListView maListViewPerso = (ListView) findViewById(R.id.lv_Reglage); par ListView maListViewPerso = (ListView) alertReglageView.findViewById(R.id.lv_Reglage); (Il faut que tu ailles chercher la ListView sur la View de ton AlertDialog, pas sur celle de ton Activity) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Gabin Posté(e) 28 février 2011 Auteur Share Posté(e) 28 février 2011 Ok tout simplement... j'ai honte :emo_im_foot_in_mouth: Merci Sinon il me vient un second problème, je n'ai que le premier item de ma ListView qui s'affiche... Mystères... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Gabin Posté(e) 28 février 2011 Auteur Share Posté(e) 28 février 2011 Un petit up ! Quelqu'un aurait il une idée ? Ma ListView ne charge que mon premier item... pourquoi ? Je remet le code ici : AlertDialog.Builder alertReglageBuilder = new AlertDialog.Builder(this); LayoutInflater factory2 = LayoutInflater.from(this); final View alertReglageView = factory2.inflate(R.layout.alertreglage, null); alertReglageBuilder.setView(alertReglageView); maListViewPerso = (ListView) alertReglageView.findViewById(R.id.lv_Reglage); ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>(); HashMap<String, String> map; map = new HashMap<String, String>(); map.put("titreReg", "Profil"); map.put("descriptionReg", "Gérer votre profil"); map.put("imgReg", String.valueOf(R.drawable.boutonrondprofil)); listItem.add(map); map = new HashMap<String, String>(); map.put("titreReg", "Option"); map.put("descriptionReg", "régler les options"); map.put("imgReg", String.valueOf(R.drawable.boutonrondreglage)); listItem.add(map); SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.affreglage, new String[] {"imgReg", "titreReg", "descriptionReg"}, new int[] {R.id.imgReg, R.id.titreReg, R.id.descriptionReg}); maListViewPerso.setAdapter(mSchedule); Merci à vous :) 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.