2013-07-18 3 views
2

사용자 정의 ListView을 작성했으며 ListViewSimpleAdapter으로 채운 java로 작성했습니다. 각각 android ListView Simple Adapter, item repeat

setContentView(R.layout.activity_my); 
list = (ListView) findViewById(R.id.lvList); 

itemList = new ArrayList<HashMap<String, String>>(); 
itemMap = new HashMap<String, String>(); 

for (int i = 0; i < songs.length; i++) { 
    itemMap.put("song", songs[i]); 
    itemMap.put("artist", artists[i]); 
    System.out.println(songs[i] + "  " + artists[i]); 
    itemList.add(itemMap); 
} 

SimpleAdapter adapter = new SimpleAdapter(this, itemList, 
      android.R.layout.simple_list_item_2, new String[] {"song", 
        "artist"}, new int[] { android.R.id.text1, 
        android.R.id.text2 }); 
list.setAdapter(adapter); 

가 지금은 두 String Arrays 노래를 만든 아티스트와 itemList라는 ArrayListHashMap을 넣어 다음 HashMap에 넣어 및 다음은 내 코드입니다. 그런 다음 매개 변수에 기본 목록 항목 ID가있는 어댑터를 설정합니다.

내가 직면 한 문제는 응용 프로그램을 실행할 때 목록보기가 문자열 배열의 마지막 항목과 하위 항목 만 반복적으로 표시한다는 것입니다. 참조 용 이미지가 있습니다. My ListView

왜 이런 일이 발생하는지 알고 싶습니다. 나는 for() 루프 외부에서 itemList.add(itemMap);을 넣으려고했으나 여전히 작동하지 않았다. 도움이 정말로 적절한 설명과 함께 감사하게 될 것입니다, 왜냐하면 나는 이것에 대해 조금 새로운 것입니다. 고맙습니다!

+0

'HashMap'에 같은 키를 계속 추가하고 있습니다. –

+0

어 약간의 정교가 도움이 될 것입니다. – SynerFlow

답변

3

반복 할 때마다 itemMap 개체를 재생성하면됩니다. 다음과 같은 방법으로 시도하십시오.

for (int i = 0; i < songs.length; i++) { 
    itemMap = new HashMap<String, String>(); 
    itemMap.put("song", songs[i]); 
    itemMap.put("artist", artists[i]); 
    System.out.println(songs[i] + "  " + artists[i]); 
    itemList.add(itemMap); 
} 

Explaination에

itemMap = new HashMap<String, String>(); 

for (int i = 0; i < songs.length; i++) { 
    itemMap.put("song", songs[i]); 
    itemMap.put("artist", artists[i]); 
    System.out.println(songs[i] + "  " + artists[i]); 
    itemList.add(itemMap); 
} 

변경이 : 여기

Refer. 참고 HashMapkeyvalue 쌍으로 키의 값을 저장합니다. 따라서 HashMap은 중복 키를 허용하지 않습니다. 코드에서 이미 songartist의 값을 추가했습니다. 따라서이 키의 값을 다시 추가 할 수 없습니다. 그러나 itemlist은 모든 반복마다 itemMap을 추가합니다. 그래서 같은 목록을 반복하는 목록입니다. 이 문제를 피하려면 단순히 itemMap 개체를 다시 인스턴스화하십시오.

이 정보가 도움이되기를 바랍니다.

+0

좋아! 그것은 효과가 있었다. 왜 이것이 효과가 있었는지 설명해 주시겠습니까? 감사합니다 – SynerFlow

+0

오 마이 갓! 나는 너를 안아! !!! 고맙습니다. :) – afsane

0

형제, 당신은 틀림없이 당신이하고 있다고 믿지 않을 것입니다.

각 반복마다 HashMap의 새 개체를 만듭니다.

+0

예. 잘못하고 있었고 2013 년 7 월에 제 문제에 대한 해결책을 찾았습니다. 형, 믿을 수는 없지만 9 개월이나 늦었습니다. – SynerFlow

+0

나는 너를 내 친구라고 믿는다 .. 나는 게시일을 보지 못했다. : D : P;) – Prakash