所以我正在尝试扩展基类Application
类并添加成员变量来创建全局变量,就像下面这个链接的第一个解决方案一样。
如果成员变量是简单数据类型,如String
或Boolean
,则此方法有效。但是,如何处理更复杂的数据类型呢?在我的情况下,我希望成员变量的类型为HashMap<String, Boolean>
。
我在onActivityResult()
(布尔值,String
和HashMap<String, Boolean>
)中设置了三个成员变量,我试图在{{1}中访问这些成员变量按钮onClick()
的方法。当我访问字符串和布尔变量时,它们的值被适当地设置。但是,当我访问onClickListener
变量时,其值设置为“{}”,空HashMap<String, Boolean>
。复杂数据类型是否需要某种HashMap
?
我还添加了Serialization
作为成员变量,当我在ArrayList<Boolean>
方法中访问此变量时,它已正确设置。可能HashMaps必须设置不同。我不太确定这一点。
在下面的代码中,我只展示了一个仅包含onclick()
成员变量的精简版本。
这是我的HashMap
Application
以下是我的Messenger 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;
}
}
中的方法onActivityResult()
和onClick()
。在Activity
中,我设置了MyApp类的私有成员变量。在onActivityResult()
方法中,我调用了访问器方法。
onClick()
答案 0 :(得分:0)
所以我解决了这个问题。在onActivityResult()
方法中,我正在迭代HashMap
,如此:
Iterator<Entry<String, Boolean>> it = sc.entrySet().iterator();
while (it.hasNext()) {
HashMap.Entry pairs = (HashMap.Entry) it.next();
String contactId = pairs.getKey().toString();
boolean selected = (Boolean) pairs.getValue();
if (selected) {
selectedContactsText += getName(contactId) + ", ";
Log.d("Messenger", getName(contactId) + " was selected");
Log.d("Messenger", selectedContactsText + " is the text");
}
it.remove(); // avoids a ConcurrentModificationException
}
但是我注意到while循环的最后一个语句实际上是从HashMap
删除了元素。所以我评论了这一行,所有工作都按预期进行。