마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

listview 중복데이터 삭제

0 추천

안녕하세요.

이제 막 안드로이드에 대해서 배우고 있는 학생입니다.

이번에 간단하게 music player를 만들려고 하는데요.

재생목록을 만드는 도중 album별로 정렬시 같은 album이 여려개 보여지더라구요;;

아래는 소스코드인데요;

hashset을 이용하는 방법이 있다고는 들었는데; 

어떻게 사용하는지를 도저히 모르겠네요;ㅜㅜ

 

public class AlbumActivity extends ListActivity {
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
Cursor cursor;
 
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
 
List<String> artists = getArtists();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, artists);
setListAdapter(adapter);
 
}
 
public List<String> getArtists() {
List<String> list = new ArrayList<String>();
String[] cursorColumns = new String[] { MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.ALBUM };
 
cursor = this.managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
cursorColumns, selection, null, null);
 
if (cursor == null) {
return list;
}
if (cursor.moveToFirst()) {
int idColumn = cursor.getColumnIndex(MediaStore.Audio.Artists._ID);
// int titleColumn = cursor
// .getColumnIndex(MediaStore.Audio.Media.TITLE);
int artistColumn = cursor
.getColumnIndex(MediaStore.Audio.Artists.ARTIST);
int albumColumn = cursor
.getColumnIndex(MediaStore.Audio.Albums.ALBUM);
 
do {
// String artist = cursor.getString(artistColumn);
// String thisTitle = cursor.getString(titleColumn);
String album = cursor.getString(albumColumn);
list.add(album);
} while (cursor.moveToNext());
}
cursor.close();
return list;
 
}
}
 
RoAInNa (240 포인트) 님이 2014년 1월 6일 질문

1개의 답변

+2 추천
 
채택된 답변
리스트에 앨범을 넣을때 리스트에서 중복 검사를 하면 됩니다.

if(!list.contains(album)) {

list.add(album);

}

 

아니면 말씀하신 hashset을 이용하는 방법도 있는데요.

hashset은 기본적으로 중복검사 기능이 내장되어있습니다.

다만 현재 아답터에서는 list형태를 사용하니 list 형태로 변환해야 합니다.

List<String> list = new ArrayList<String>();

HashSet<String> hs = new HashSet<String>();

....

....

do {

list.add(album); 이 코드를 hs.add(album);

} while

list.addAll(hs); 하시면 됩니다.

 

참고로 HashSet은 순서를 보장하지 않습니다.

그래서 LinkedHashSet을 사용하시면 순서도 보장 받으실 수 있습니다.
원조안드로이드 (58,190 포인트) 님이 2014년 1월 6일 답변
RoAInNa님이 2014년 1월 17일 채택됨
정말 감사합니다. ㅜㅜ
덕분에 해결했습니다.
...