Android - Traitement d'une modification de l'orientation de la boîte de dialogue sur l'écran

Je suis substitution de la onCreateDialog et onPrepareDialog de méthodes ou de la classe de boîte de Dialogue.

J'ai suivi l'exemple de Reto Meier Professionnel du Développement d'Applications Android livre, le Chapitre 5 de tirer des données XML et ensuite utiliser une boîte de dialogue pour afficher l'info.

J'ai suivi exactement, mais il a changé les variables pour l'adapter à mon propre schéma XML comme suit:


@Override
public Dialog onCreateDialog(int id) {
  switch(id) {
    case (SETTINGS_DIALOG) :        
      LayoutInflater li = LayoutInflater.from(this);
      View settingsDetailsView = li.inflate(R.layout.details, null);

      AlertDialog.Builder settingsDialog = new AlertDialog.Builder(this);
      settingsDialog.setTitle("Provisioned Settings");         
      settingsDialog.setView(settingsDetailsView);
return settingsDialog.create();
  }
  return null;
}

@Override
public void onPrepareDialog(int id, Dialog dialog) {
  switch(id) {
    case (SETTINGS_DIALOG) :                  

String afpunText = "  ";

     if(setting.getAddForPublicUserNames() == 1){
      afpunText = "Yes";
     }
     else{
      afpunText = "No";
     }
      String Text = "Login Settings: " + "\n" 
                       + "Password: " + setting.getPassword()  + "\n" 
                       + "Server: " + setting.getServerAddress() + "\n";


      AlertDialog settingsDialog = (AlertDialog)dialog; 
settingsDialog.setTitle(setting.getUserName());

tv = (TextView)settingsDialog.findViewById(R.id.detailsTextView);
if (tv != null)
        tv.setText(Text);

      break;
  }
}

Il fonctionne très bien jusqu'à ce que j'ai essayer de changer l'orientation de l'écran, Quand je fais ce onPrepareDialog obtient appeler mais je reçois pointeur null exceptions sur toutes mes variables.

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

Donc je suppose que quelque chose a été laissé de côté de l'exemple dans le livre que j'ai besoin de remplacer une autre méthode pour enregistrer mes variables ou quelque chose?

J'ai maintenant ajouté ce qui suit:


@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  //Save UI state changes to the savedInstanceState.
  //This bundle will be passed to onCreate if the process is
  //killed and restarted.
  savedInstanceState.putString("Username", setting.getUserName());
  savedInstanceState.putString("Password", setting.getPassword());
  savedInstanceState.putString("Server", setting.getServerAddress());

  super.onSaveInstanceState(savedInstanceState);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  settings.clear();
  //Restore UI state from the savedInstanceState.
  //This bundle has also been passed to onCreate.
  username = savedInstanceState.getString("Username");
  password = savedInstanceState.getString("Password");
  serveraddress = savedInstanceState.getString("Server");


Settings setting = new Settings(username, password, serveraddress);
addNewSettings(setting);

}

Mais je suis encore en train de l'exception de Pointeur Null

source d'informationauteur Donal Rafferty