2011-02-04 4 views
1

두 개의 배열이 있습니다 (실제로는 하나이지만 각 열에 대해 두 개를 만듭니다).배열에서 해시 맵을 채우는 방법

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 
HashMap<String, String> map = new HashMap<String, String>(); 

    for (int i=0; i<13; i++) 
    { 
     map.put("left1", date[i]); 
     map.put("right1", name[i]); 
     mylist.add(map); 
    } 


SimpleAdapter simpleAdapter = new SimpleAdapter(this, mylist, R.layout.row, 
     new String[] {"left1", "right1"}, new int[] {R.id.left, R.id.right}); 
lv1.setAdapter(simpleAdapter); 

어떤 아이디어 : 나는 목록보기의 값하지만 목록보기의 모든 요소가있는 해시 맵이 배열의 마지막 요소입니다 채우려? 감사합니다.

+1

구체적인 구현으로 제한하는 대신 인터페이스 만 사용하여 변수를 선언하는 것을 고려해야합니다. 'List > myList'가 더 좋을 것입니다. – rfeak

+0

사실 그것은 아마도 List > myList' (그리고 Map map')을 확장합니다. 그러나 모든 변수는 그것이 알려진 가장 구체적인 유형으로 선언되어야한다는 논쟁이 있습니다. 이 기준에 따르면 선언은 함수에 국한되어 있기 때문에 서있는 것처럼 좋다. (매개 변수로서, 동일한 기준은 받아 들일 수있는 가장 일반적인 유형으로 선언되어야한다고 지시합니다.) 게다가,이 방법은 가져 오기 또는 둘을 저장합니다. :) –

답변

6

배열의 모든 슬롯에 동일한 맵을 추가하고 있습니다. 대신 다음을 시도하십시오 :

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 

for (int i=0; i<13; i++) 
{ 
    HashMap<String, String> map = new HashMap<String, String>(); 
    map.put("left1", date[i]); 
    map.put("right1", name[i]); 
    mylist.add(map); 
} 
+0

+1 : 그래서 변수 선언을 어디에 두어야하는지 조심해야합니다! – Powerlord

+0

무엇을 의미합니까? 나는 oncreate 메소드에서 배열을 선언하려고 시도했다. 둘 다 바깥쪽에 배열했다. \t String [] date = new String [13]; – erdomester

+0

@erdomester : 원래 구현에서 이미 하나의 맵이 생성되었습니다. 그런 다음 루프를 통과하면서 다른 값을 넣을 때마다 동일한 키가 매번 (덮어 쓰여집니다.) 결국 배열의 마지막 값으로 끝나는 것입니다. @Ted Hopp의 메서드는 루프가 실행될 때마다 새 맵을 만들고 키와 값이있는 맵을 배열에 추가합니다. – kcoppock

관련 문제