10
votes

Android - Traiter avec une boîte de dialogue sur l'orientation de l'écran

Je remplace les méthodes onCreateDeaDialog et surpreparediAlog ou la classe de dialogue.

J'ai suivi l'exemple du livre de développement d'applications Android Android de RETO Meier, chapitre 5 pour extraire des données XML, puis utilisez une boîte de dialogue pour afficher les informations.

J'ai essentiellement la suivi exactement mais j'ai changé les variables en fonction de mon propre schéma XML comme suit:


xxx

Ça fonctionne bien Jusqu'à ce que j'essaie d'essayer de changer l'orientation de l'écran, lorsque je le fais que surpreparedialog reçoit un appel, mais je reçois des exceptions de pointeur nulle sur toutes mes variables.

L'erreur se produit toujours même lorsque je dis à mon activité d'ignorer l'orientation de l'écran dans le manifeste .

Je suppose que quelque chose a été laissé de côté de l'exemple dans le livre, dois-je remplacer une autre méthode pour enregistrer mes variables dans ou quelque chose?

J'ai ajouté ce qui suit :


xxx

mais je reçois toujours l'exception du pointeur Null


0 commentaires

3 Réponses :


2
votes

Lorsque vous changez d'orientation, Android redémarrez votre activité, vous devez enregistrer le domaine avec xxx

et récupérer avec xxx


0 commentaires

4
votes

Je n'ai pas le livre de Reto, je ne peux donc pas vérifier le code, mais s'il y a une erreur dans le livre, vous pouvez le contacter facilement sur Twitter pour en discuter: http://twitter.com/retomeier

N'oubliez pas que si l'orientation de l'écran change, votre activité est recréée. Cela signifie que toutes les variables que vous avez définis la dernière fois, qui ne sont pas statiques, seront perdues après la recréation de l'activité sous la nouvelle orientation. P>

Je suppose que vous avez frappé une nullpointerException ici: P >

if(setting.getAddForPublicUserNames() == 1){


4 commentaires

Salut Seanhodges, j'ai suivi l'exemple dans l'exemple de dépassement de la pile que vous avez fourni, j'ai ajouté mon nouveau code à ma question, mais je reçois toujours le pointeur NULL sur la ligne exacte que vous avez mentionnée - si (paramètre.getaddforpublicusernes () == 1) {


Hmm, je m'attendrais à ce que cela fonctionne maintenant. Essayez de coller un point d'arrêt dans votre méthode onrestoreInstanseTate () et assurez-vous que le «réglage» est en cours d'étant défini avant que la méthode ONPPAREDIAYOG () essaie de l'utiliser ...


Il semblerait que mon objet de réglage soit la cause des pointeurs NULL, il ne doit pas être créé / sauvé ou quelque chose? J'ai changé toutes mes variables pour être dans la classe et supprimé l'utilisation de l'objet de configuration et l'application fonctionne bien maintenant. Q Le reste de la soirée déterminer pourquoi mon objet ne devient pas sauvegardé / créé :(


Vous pouvez faire un "réglage = nouveau paramètre ()" dans le constructeur de votre activité (qui ne sera pas appelé la deuxième fois). Assurez-vous que vous avez mis "this.setting = réglage" dans votre méthode addNewSettings ().



0
votes

Si vous ne voulez pas que l'activité soit recréée lorsque l'orientation change. Insérez la ligne suivante dans l'androidmanifest.xml. xxx

exemple:


1 commentaires

Pour moi, cette réponse a été le moyen le plus rapide de corriger tous les bugs liés au changement d'orientation de l'écran. Cela m'a aidé tout en intégrant des dialogues Facebook! L'utilisateur peut toujours utiliser le clavier matériel.