Variable global extender la clase de aplicación

Así que estoy tratando de extender la base.Application clase y agregue variables miembro para crear variables globales como en esta primera solución del enlace a continuación.

Variable global de Android

Esto funciona si la variable miembro es un tipo de datos simple como unString o unBoolean. Pero, ¿cómo lo haría para un tipo de datos más complejo? En mi caso me gustaría que la variable miembro fuera de tipoHashMap<String, Boolean>.

Estoy configurando tres variables miembro enonActivityResult() (un booleano, unString, y unHashMap<String, Boolean>), y estoy tratando de acceder a estas variables miembro en elonClick() método de un botónonClickListener. Cuando accedo a la cadena y las variables booleanas, sus valores se configuran de manera apropiada. Sin embargo cuando accedo alHashMap<String, Boolean> variable su valor se establece en '{}', un vacíoHashMap. Hay algun tipo deSerialization ¿Que tiene que pasar con un tipo de datos complejo?

También he añadido unArrayList<Boolean> como variable miembro y cuando accedí a esta variable en elonclick() Método fue configurado correctamente. Posiblemente los HashMaps deben configurarse de manera diferente. No estoy muy seguro de este punto.

En el código a continuación, solo muestro una versión reducida que solo incluye laHashMap variable miembro

Aquí está la mi subclase deApplication

<code>public class MyApp extends Application {
  private HashMap<String, Boolean> selectedContacts = null;

  public HashMap<String, Boolean> getSelectedContacts() {
    return this.selectedContacts;
  }

  public void setSelectedContacts(HashMap<String, Boolean> sc) {
    this.selectedContacts = sc;
  }
}
</code>

A continuación se presentan los métodosonActivityResult() yonClick() en mi mensajeroActivity. EnonActivityResult(), Establezco la variable miembro privada de la clase MyApp. En elonClick() Método, yo llamo el método de acceso.

<code>public void onActivityResult(int reqCode, int resultCode, Intent data) {
  super.onActivityResult(reqCode, resultCode, data);

  switch (reqCode) {
    case R.integer.contact_manager:

      if (resultCode == RESULT_CANCELED)
        Log.d(getString(R.string.debug_tag), "FAILURE");
      if (resultCode == RESULT_OK) {
        Log.d(getString(R.string.debug_tag), "SUCCESS");

        MyApp appState = ((MyApp)getApplication());

        appState.setSelectedContacts((HashMap<String, Boolean>) data.getSerializableExtra("selectedContacts")); 
      }

      break;
   } 
}  


add_contact_button.setOnClickListener(new OnClickListener() {
  public void onClick(View v) {

    Intent i = new Intent(Messenger.this, ContactManager.class);

    MyApp appState = ((MyApp)getApplication());
    HashMap<String, Boolean> sc = appState.getSelectedContacts();   

    if (sc != null) {
      int totalContacts = sc.size();
      if(totalContacts > 0) {
        Bundle bundle = new Bundle();
        bundle.putSerializable("selectedContacts",sc); 
        i.putExtras(bundle);
      } 
    }
    startActivityForResult(i, R.integer.contact_manager);

  }
});
</code>

Respuestas a la pregunta(1)

Su respuesta a la pregunta