Variável global estende a classe de aplicativo
Então estou tentando estender a baseApplication
class e adicione variáveis de membro para criar variáveis globais como nesta primeira solução do link abaixo.
Isso funciona se a variável de membro é um tipo de dados simples como umString
ou umBoolean
. Mas como você faria isso para um tipo de dados mais complexo? No meu caso eu gostaria que a variável de membro fosse do tipoHashMap<String, Boolean>
.
Eu estou definindo três variáveis membro emonActivityResult()
(um booleano, umString
e umHashMap<String, Boolean>
), e estou tentando acessar essas variáveis de membro noonClick()
método de um botãoonClickListener
. Quando eu acesso as variáveis string e booleanas, seus valores são definidos apropriadamente. No entanto, quando eu acessar oHashMap<String, Boolean>
variável seu valor é definido como '{}', um vazioHashMap
. Existe algum tipo deSerialization
que precisa acontecer com um tipo de dados complexo?
Eu também adicionei umArrayList<Boolean>
como uma variável membro e quando eu acessei esta variável noonclick()
método foi definido corretamente. Possivelmente, o HashMaps deve ser definido de forma diferente. Eu não tenho certeza se é esse o ponto.
No código abaixo, estou mostrando apenas uma versão simplificada que inclui apenas oHashMap
variável de membro.
Aqui está a minha subclasse 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>
Abaixo estão os métodosonActivityResult()
eonClick()
no meu mensageiroActivity
. EmonActivityResult()
, Eu defino a variável de membro particular da classe MyApp. NoonClick()
método, eu chamo o método de acesso.
<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>