所以我正在尝试扩展基Application
类并添加成员变量来创建全局变量,就像下面链接的第一个解决方案一样。
如果成员变量是简单的数据类型,如 aString
或 a ,则此方法有效Boolean
。但是对于更复杂的数据类型,你会怎么做呢?在我的情况下,我希望成员变量是 type HashMap<String, Boolean>
。
我在onActivityResult()
(一个布尔值、一个String
和一个HashMap<String, Boolean>
)中设置了三个成员变量,并且我试图在onClick()
一个按钮的方法中访问这些成员变量onClickListener
。当我访问字符串和布尔变量时,它们的值被适当地设置。但是,当我访问该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;
}
}
以下是我的 MessengeronActivityResult()
中的方法。在中,我设置了 MyApp 类的私有成员变量。在方法中,我调用访问器方法。onClick()
Activity
onActivityResult()
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);
}
});