Zmienna globalna rozszerza klasę aplikacji

Próbuję więc rozszerzyć bazęApplication klasy i dodaj zmienne członkowskie, aby utworzyć zmienne globalne, jak w tym pierwszym rozwiązaniu poniższego linku.

Zmienna globalna Androida

Działa to, jeśli zmienna składowa jest prostym typem danych, takim jak aString&nbsp;lub aBoolean. Ale jak byś to zrobił dla bardziej złożonego typu danych? W moim przypadku chciałbym, aby zmienna składowa była typuHashMap<String, Boolean>.

Ustawiam trzy zmienne składoweonActivityResult()&nbsp;(boolean, aStringi aHashMap<String, Boolean>) i próbuję uzyskać dostęp do tych zmiennych członkowskich wonClick()&nbsp;metoda przyciskuonClickListener. Gdy uzyskuję dostęp do zmiennych łańcuchowych i boolowskich, ich wartości są odpowiednio ustawiane. Jednak kiedy uzyskuję dostęp doHashMap<String, Boolean>&nbsp;zmienna jej wartość jest ustawiona na „{}”, pustaHashMap. Czy jest jakiś rodzajSerialization&nbsp;to musi się zdarzyć przy złożonym typie danych?

Dodałem takżeArrayList<Boolean>&nbsp;jako zmienna składowa i kiedy uzyskałem dostęp do tej zmiennej wonclick()&nbsp;metoda została poprawnie ustawiona. Prawdopodobnie HashMaps muszą być ustawione inaczej. Nie jestem pewien, czy to jest ten punkt.

W poniższym kodzie pokazuję tylko okrojoną wersję, która zawiera tylkoHashMap&nbsp;zmienna składowa.

Oto moja podklasaApplication

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

Poniżej znajdują się metodyonActivityResult()&nbsp;ionClick()&nbsp;w moim PosłannikuActivity. WonActivityResult(), Ustawiam zmienną członka prywatnego klasy MyApp. wonClick()&nbsp;metoda, wywołuję metodę dostępu.

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

  }
});