【问题标题】:Hashmap list updating all string valuesHashmap 列表更新所有字符串值
【发布时间】:2017-10-01 03:09:42
【问题描述】:

我正在使用可扩展的列表视图,并且需要每个标题的标题列表和子标题...我在下面的代码中面临的问题是它正在更新所有字符串/键值而不是目标值...

    private void prepareListData() {
        listDataHeader = new ArrayList<String>();
        listDataChild = new HashMap<String, List<String>>();
        databaseProjects = new ArrayList<>();
        arrayListTagNames=new ArrayList<String>();
        arrayListTagNames.clear();
        int countheaders = 0;


        for(int i = 0; i < databasePositions.size(); i++) {


            if (!(databasePositions.get(i).equals("None"))) {

                listDataHeader.add(databasePositions.get(i));

                databaseProjects = databaseAdapter.getAllProjectsNameOnlyDBusingserverID(databasePositionsid.get(i));

                for (int j = 0; j < databaseProjects.size(); j++) {
                    if (!(databaseProjects.get(j).equals("None"))) {
                        arrayListTagNames.add( databaseProjects.get(j));
                    }
                }

                listDataChild.put(listDataHeader.get(countheaders), arrayListTagNames);


                countheaders++;
                arrayListTagNames.clear();
            }
        }
    }

【问题讨论】:

  • 您只是创建了一个ArrayList&lt;String&gt;,然后在地图中多次引用该列表。基本上,您需要在每次迭代时创建一个新列表。
  • 但我每次都在清除并将更新的列表添加到新位置,但它仍然在替换所有? listDataChild.put(listDataHeader.get(countheaders), arrayListTagNames);
  • 您正在反复清除同一个列表。了解引用在 Java 中的工作原理是至关重要的

标签: java android hashmap expandablelistview


【解决方案1】:

当您使用 arrayListTagNames.clear() 清除 arrayList 时,它会影响放入 hashmap 的内容,而不是清除创建一个新的数组列表并放入 HashMap,尝试这样的事情

private void prepareListData() {
            listDataHeader = new ArrayList<String>();
            listDataChild = new HashMap<String, List<String>>();
            databaseProjects = new ArrayList<>();
            int countheaders = 0;


            for(int i = 0; i < databasePositions.size(); i++) {


                if (!(databasePositions.get(i).equals("None"))) {
                    arrayListTagNames=new ArrayList<String>();

                    listDataHeader.add(databasePositions.get(i));

                    databaseProjects = databaseAdapter.getAllProjectsNameOnlyDBusingserverID(databasePositionsid.get(i));

                    for (int j = 0; j < databaseProjects.size(); j++) {
                        if (!(databaseProjects.get(j).equals("None"))) {
                            arrayListTagNames.add( databaseProjects.get(j));
                        }
                    }

                    listDataChild.put(listDataHeader.get(countheaders), arrayListTagNames);


                    countheaders++;
                }
            }
        }

【讨论】:

    猜你喜欢
    • 2016-04-06
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2015-11-07
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    相关资源
    最近更新 更多