Глобальная переменная расширяет класс приложения
Поэтому я пытаюсь расширить базуApplication
Класс и добавить переменные-члены для создания глобальных переменных, как в первом решении по ссылке ниже.
Это работает, если переменная-член имеет простой тип данных, такой какString
илиBoolean
, Но как бы вы сделали это для более сложного типа данных? В моем случае я хотел бы, чтобы переменная-член имела типHashMap<String, Boolean>
.
Я устанавливаю три переменные-члены вonActivityResult()
(логическое,String
иHashMap<String, Boolean>
), и я пытаюсь получить доступ к этим переменным-членам вonClick()
метод кнопкиonClickListener
, Когда я обращаюсь к строковым и логическим переменным, их значения устанавливаются соответствующим образом. Однако, когда я получаю доступ кHashMap<String, Boolean>
переменная, ее значение установлено как «{}», пустойHashMap
, Есть ли какая-тоSerialization
что должно произойти со сложным типом данных?
Я также добавилArrayList<Boolean>
в качестве переменной-члена, и когда я получил доступ к этой переменной вonclick()
Метод был установлен правильно. Возможно, HashMaps должны быть установлены по-другому. Я не слишком уверен в этом.
В приведенном ниже коде я просто показываю урезанную версию, которая включает толькоHashMap
переменная-член.
Вот мой подклассApplication
<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>
Ниже приведены методыonActivityResult()
а такжеonClick()
в моем мессенджереActivity
, ВonActivityResult()
Я установил закрытую переменную-член класса MyApp. вonClick()
метод, я вызываю метод доступа.
<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>