在Java中为适配器创建String的映射

时间:2013-07-23 08:39:20

标签: android map expandablelistview

您好我正在开发一个Android应用程序,我需要使用可扩展列表。我在网上找到了一个很好的示例代码来使用可扩展列表。所以我基于这段代码来解决我的问题。 结果应与我的iOS应用程序类似,您可以在此处看到屏幕截图:http://postimg.org/image/ej9t50f6t/。 我遇到这种情况: 我的Map的键插入一个数组,数据插入2个数组,现在我应该有这种情况:

Map {
key = Episodio 1       29 Giu 2013, value= [14:30, https://lh6.googleusercontent.com/-XSh-9ngYJu4/ThiY-xl2EeI/AAAAAAAABmc/iz04VpL5hOs/s800/realtime.png, Real Time]

key = Episodio 1       29 Giu 2013, value= [16:30, http://tv.zam.it/canali/dmax.png, DMAX]

key = Episodio 2       01 Lug 2013, value= [14:30, https://lh6.googleusercontent.com/-XSh-9ngYJu4/ThiY-xl2EeI/AAAAAAAABmc/iz04VpL5hOs/s800/realtime.png, Real Time]

key = Episodio 2       01 Lug 2013, value= [16:30, http://tv.zam.it/canali/dmax.png, DMAX]
}

所以我写了这段代码:

    String[] progrepvis1 = null;
    String[] progrepvis2 = null;
    for (int i = 0; i < epTime.length; i++) {
        if (i % 2 == 0) {
            String[] progrepvis1temp = {epTime[i], epChLogo[i], epCh[i]};
            progrepvis1 = progrepvis1temp;
        } else {
            String[] progrepvis2temp = {epTime[i], epChLogo[i], epCh[i]};
            progrepvis2 = progrepvis2temp;
        }
    }
    episodeData = new LinkedHashMap<String, List<String>>();

    Log.d("GROUP", "" + groupList);

    for (String episode : groupList) {
        for (int i = 0; i < episodeNumberAndDate.length; i++) {
            if (i % 2 == 0 && episode.equals(episodeNumberAndDate[i])) {
                loadChild(progrepvis1);
            } else {
                loadChild(progrepvis2);
            }
        }
        episodeData.put(episode, childList);
    }
    Log.d("LISTA", "" + episodeData);

}

private void loadChild(String[] episodeData) {
    childList = new ArrayList<String>();
    for (String episode : episodeData) {
        childList.add(episode);
    }
}

但这段代码的结果如下:

Map {
key = Episodio 1       29 Giu 2013, value= [16:30, http://tv.zam.it/canali/dmax.png, DMAX]

key = Episodio 2       01 Lug 2013, value= [16:30, http://tv.zam.it/canali/dmax.png, DMAX]
}

你可以看到我只重复了这些程序,但我不是第一次,我怎么能解决这个问题?我希望你能帮帮我 谢谢

2 个答案:

答案 0 :(得分:0)

来自Java documentation

  

公共界面地图

     

将键映射到值的对象。地图 无法 包含重复内容   键;每个键最多可以映射一个值。

您尝试将不同的值映射到同一个键,但这是不可能的。

  

put(K键,V值)
  将指定的值与此映射中的指定键相关联(可选操作)。

因此,当您使用相同的密钥第二次呼叫episodeData.put(episode, childList);时,您将从第一次覆盖该值。

答案 1 :(得分:0)

看起来你的问题在于你的密钥是相同的,在HashMap的情况下,它会将相同的密钥分组为一个密钥/值对(最后添加的值会覆盖以前添加的值)。 / p>

如果您希望能够多次使用相同的密钥,请尝试以下方法:

HashMap<String, Vector<String>> keyValueList = new HashMap<String, Vector<String>>();

这是HashMap,其中String为关键字,并使用Vector<String>作为。此向量将允许您为单个键设置多个值。

要从此列表中读取值

String key = "Episodio 1       29 Giu 2013";
Vector<String> valueList = keyValueList.get(key);
for ( int i = 0; i < valueList.getSize(); i++ )
{
    String value = valueList.elementAt(i);
    // ... do something with the value here
}