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
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()
ionClick()
w moim PosłannikuActivity
. WonActivityResult()
, Ustawiam zmienną członka prywatnego klasy MyApp. wonClick()
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);
}
});