Globale Variable erweitern Anwendungsklasse

Also versuche ich die Basis zu erweiternApplication Klasse und füge Mitgliedsvariablen hinzu, um globale Variablen wie in dieser ersten Lösung des nachstehenden Links zu erstellen.

Globale Android-Variable

Dies funktioniert, wenn die Mitgliedsvariable ein einfacher Datentyp wie a istString oder einBoolean. Aber wie würden Sie es für einen komplexeren Datentyp tun? In meinem Fall möchte ich, dass die Mitgliedsvariable vom Typ istHashMap<String, Boolean>.

Ich setze drei Mitgliedsvariablen inonActivityResult() (ein Boolescher, einString, und einHashMap<String, Boolean>), und ich versuche, auf diese Mitgliedsvariablen im zuzugreifenonClick() Methode einer TasteonClickListener. Wenn ich auf die Zeichenkette und die booleschen Variablen zurückgreife, werden ihre Werte passend eingestellt. Allerdings, wenn ich auf dieHashMap<String, Boolean> Variable, deren Wert auf '{}' gesetzt ist, ein leerer WertHashMap. Gibt es eine Art vonSerialization das muss mit einem komplexen datentyp passieren?

Ich habe auch eine hinzugefügtArrayList<Boolean> als Mitglied Variable und als ich auf diese Variable in der zugegriffen habeonclick() Methode wurde richtig eingestellt. Eventuell müssen HashMaps anders gesetzt werden. Ich bin mir nicht sicher, ob das so ist.

Im folgenden Code zeige ich nur eine abgespeckte Version, die nur die enthältHashMap Mitgliedsvariable.

Hier ist meine Unterklasse vonApplication

<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>

Nachfolgend sind die Methoden aufgeführtonActivityResult() undonClick() in meinem MessengerActivity. ImonActivityResult()Ich habe die private Member-Variable der MyApp-Klasse gesetzt. In demonClick() Methode, ich rufe die Accessor-Methode.

<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>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage