2017-05-03 3 views
1

확장 가능한 목록보기를 사용하고 각 헤더의 헤더와 하위 목록이 필요합니다. 아래 코드에서 직면하는 문제는 대상 문자열 대신 모든 문자열/키 값을 업데이트한다는 것입니다. ...모든 문자열 값을 업데이트하는 해시 맵 목록

당신이 arrayListTagNames.clear을 (사용의 ArrayList를 삭제하는
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(); 
      } 
     } 
    } 
+0

'ArrayList ' 그 목록에 대한 참조를지도에 여러 번 넣는 것입니다. 기본적으로 각 반복마다 새 목록을 만들어야합니다. –

+0

하지만 매번 삭제되고 새로운 위치에만 업데이트 된 목록을 추가하지만 여전히 모든 것을 대체하고 있습니까? listDataChild.put (listDataHeader.get (countheaders), arrayListTagNames); – user3633153

+0

동일한 목록 *을 반복해서 지우고 있습니다. 자바에서 레퍼런스가 어떻게 작동하는지 배우는 것이 중요합니다. –

답변

0

) 대신 새로운 배열 목록을 작성하고 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++; 
       } 
      } 
     }