所以我試圖擴展基類Application
類並添加成員變量來創建全局變量,就像在下面的鏈接的第一個解決方案中一樣。全局變量擴展應用程序類
此工作,如果成員變量是像String
或Boolean
簡單數據類型。但是,如何處理更復雜的數據類型呢?在我的情況下,我希望成員變量的類型爲HashMap<String, Boolean>
。
我設置在onActivityResult()
三個成員變量(一個布爾值,一個String
和HashMap<String, Boolean>
),我想在一個按鈕的onClickListener
的onClick()
方法來訪問這些成員變量。當我訪問字符串和布爾變量時,它們的值被適當地設置。但是當我訪問HashMap<String, Boolean>
變量時,它的值被設置爲'{}',一個空的HashMap
。是否有某種Serialization
需要使用複雜的數據類型?
我還添加了一個ArrayList<Boolean>
作爲成員變量,當我在onclick()
方法中訪問該變量時,它被正確設置。可能HashMaps必須設置不同。我不太確定這一點。
在下面的代碼中,我只展示了一個精簡版本,其中只包含HashMap
成員變量。
這裏是我的Application
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;
}
}
子類下面是我的使者Activity
方法onActivityResult()
和onClick()
。在onActivityResult()
中,我設置了MyApp類的私有成員變量。在onClick()
方法中,我調用訪問器方法。
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);
}
});