Android: tratamiento de un diálogo en la pantalla Cambio de orientación

Estoy anulando los métodos onCreateDialog y onPrepareDialog o la clase Dialog.

He seguido el ejemplo del libro Reto Meier's Professional Android Application Development Development, Capítulo 5 para obtener algunos datos XML y luego usar un diálogo para mostrar la información.

Básicamente lo seguí exactamente pero cambié las variables para adaptarme a mi propio esquema XML de la siguiente manera:

@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;
  }
}

Funciona bien hasta que trato de cambiar la orientación de la pantalla. Cuando hago esto, onPrepareDialog recibe una llamada pero obtengo excepciones de puntero nulo en todas mis variables.

El error aún ocurre incluso cuando le digo a mi actividad que ignore la orientación de la pantalla en el manifiesto.

Entonces supongo que algo se ha dejado fuera del ejemplo en el libro, ¿necesito anular otro método para guardar mis variables o algo así?

Ahora he agregado lo siguiente:

@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);

}

Pero sigo recibiendo la excepción de puntero nulo

Respuestas a la pregunta(3)

Su respuesta a la pregunta