0

您好我正在开发一个 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]
}

你可以看到我只是重复程序但我不是第一次,我该如何解决这个问题?我希望你能帮助我谢谢

4

2 回答 2

0

来自 Java文档

公共接口地图

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

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

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

因此,当您episodeData.put(episode, childList);使用相同的键第二次调用时,您将覆盖第一次的值。

于 2013-07-23T08:49:41.990 回答
0

看起来您的问题在于您的键是相同的这一事实,在 HashMap 的情况下,这会将相同的键组合成一个键/值对(最后添加的值会覆盖先前添加的值)。

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

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

这是 aHashMap作为String键,使用 aVector<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
}
于 2013-07-23T08:54:04.363 回答