全局变量扩展应用程序类

时间:2012-04-08 01:32:53

标签: subclass global extends android

所以我正在尝试扩展基类Application类并添加成员变量来创建全局变量,就像下面这个链接的第一个解决方案一样。

Android global variable

如果成员变量是简单数据类型,如StringBoolean,则此方法有效。但是,如何处理更复杂的数据类型呢?在我的情况下,我希望成员变量的类型为HashMap<String, Boolean>

我在onActivityResult()(布尔值,StringHashMap<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()

1 个答案:

答案 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删除了元素。所以我评论了这一行,所有工作都按预期进行。