2017-05-03 13 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

あなたはただ1つの 'ArrayList 'を作成していますが、そのリストへの参照をマップに複数回入れます。基本的には、各反復ごとに新しいリストを作成する必要があります。 –

+0

しかし、私は毎回消して、新しい位置だけに更新されたリストを追加しますが、それでもすべてを置き換えていますか? listDataChild.put(listDataHeader.get(countheaders)、arrayListTagNames); – user3633153

+0

*同じリスト*を繰り返し消去しています。 Javaで参照がどのように機能するかを学ぶことが重要です。 –

答えて

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++; 
       } 
      } 
     } 
関連する問題