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.
Działa to, jeśli zmienna składowa jest prostym typem danych, takim jak aString
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()
(boolean, aString
i aHashMap<String, Boolean>
) i próbuję uzyskać dostęp do tych zmiennych członkowskich wonClick()
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>
zmienna jej wartość jest ustawiona na „{}”, pustaHashMap
. Czy jest jakiś rodzajSerialization
to musi się zdarzyć przy złożonym typie danych?
Dodałem takżeArrayList<Boolean>
jako zmienna składowa i kiedy uzyskałem dostęp do tej zmiennej wonclick()
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
zmienna składowa.
Oto moja podklasaApplication
<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>
Poniżej znajdują się metodyonActivityResult()
ionClick()
w moim PosłannikuActivity
. WonActivityResult()
, Ustawiam zmienną członka prywatnego klasy MyApp. wonClick()
metoda, wywołuję metodę dostępu.
<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>