Я решил это с помощью SimpleCursorAdapter, как показано ниже. Это встроенный адаптер, который действительно умный. Эта ссылка мне очень помогла
И вы никогда не должны устанавливать android: layout_height = "wrap_content" просмотра списка. Это вызывает повторяющееся вхождение элементов списка.
ListAdapter adapter = new SimpleCursorAdapter(this,
// Use a template that displays a text view
R.layout.list_item,
// Give the cursor to the list adatper
musicCursor,
// Map the NAME column in the people database to...
new String[] { MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST },
// The "text1" view defined in the XML template
new int[] { R.id.music_title, R.id.music_artist });
setListAdapter(adapter);