2015-01-06 2 views
0

Я пытаюсь создать группу из нескольких ArrayList s для музыкального проигрывателя. Текущий список создает художников для каждой песни, а не только одного исполнителя. Надеемся, что это должно объяснить это лучше:Группировка идентичных элементов в ArrayList - MusicPlayer

Screenshot

Мой текущий код для одного из моих фрагментов заключается в следующем:

public class ArtistsFragment extends Fragment { 

private ArrayList<Artist> artistList; 
View view; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    view = inflater.inflate(R.layout.fragment_artists, container, false); 

    GridView gvArtists = (GridView) view.findViewById(R.id.gvArtists); 

    //instantiate list 
    artistList = new ArrayList<>(); 

    //get artists from device 
    getArtistList(); 

    // Group ArrayList.. 
    artistList = new ArrayList<>(new HashSet<>(artistList)); 

    //sort alphabetically by title 
    Collections.sort(artistList, new Comparator<Artist>() { 
       public int compare(Artist a, Artist b) { 
        return a.getArtist().compareTo(b.getArtist()); 
       } 
      } 
    ); 

    //create and set adapter 
    ArtistAdapter artistAdt = new ArtistAdapter(getActivity(), artistList); 
    gvArtists.setAdapter(artistAdt); 

    return view; 
} 

void getArtistList() { 
    //retrieve artist info 
    ContentResolver musicResolver = getActivity().getContentResolver(); 
    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null); 

    if (musicCursor != null && musicCursor.moveToFirst()) { 
     //get columns 
     int idColumn = musicCursor.getColumnIndex 
       (MediaStore.Audio.Media._ID); 
     int artistColumn = musicCursor.getColumnIndex 
       (MediaStore.Audio.Albums.ARTIST); 
     int artColumn = musicCursor.getColumnIndex 
       (MediaStore.Audio.Media.ARTIST_ID); 

     //add artists to list 
     do { 
      long thisId = musicCursor.getLong(idColumn); 
      String thisArtist = musicCursor.getString(artistColumn); 
      String thisArt = musicCursor.getString(artColumn); 

      artistList.add(new Artist(thisId, thisArtist, thisArt)); 
     } 
     while (musicCursor.moveToNext()); 
     musicCursor.close(); 
    } 
} 

} 

Artist.class

class Artist { 
private final long id; 
private final String artist; 
private final String art; 

public Artist(long artistID, String theartist, String artistArt) { 
    id = artistID; 
    artist = theartist; 
    art = artistArt; 
} 

public long getID() { 
    return id; 
} 

public String getArtist() { 
    return artist; 
} 

public String getArt() { 
    return art; 
} 
} 

Я посмотрел на Map , Я посмотрел на Set, и теперь я просто смущен ...

Итак, как мне сгруппировать мой ArrayList, чтобы удалить дубликаты разных исполнителей, чтобы затем использовать OnPicked, чтобы изменить ArrayList на эти сгруппированные песни в пределах этой группы/категории?

Я даже на правильных строках или есть совершенно другой способ сортировки жанров/исполнителей/альбомов и т. Д.?

+0

Честно говоря, я не понял, о чем вы спрашиваете. – Rohit5k2

+0

Что вы подразумеваете под группировкой? в вашем примере у вас есть список художников. Что именно вы хотите с этим сделать? есть ли другие списки? –

+0

Какие поля класса Художника делают уникальным артиста? –

ответ

1

Если очистка дубликатов является единственной проблемой, то это, как удалить все дубликаты в списке (преобразовать его в набор и обратно):

Set<Artist> set = new HashSet<Artist>(artistList); 
artistList = new ArrayList<Artist>(set); 
//then sort it... 

или одной линия

artistList = new ArrayList<Artist>(new HashSet<Artist>(artistList)); 

Вы также должны переопределить методы equals() и hashCode() на основе полей, которые делают запись в вашем списке уникальной.

+0

Спасибо, но это дает тот же результат, что и без 'HashSet' – Timmo

+0

Каков ваш метод equals() в классе Artist? дайте нам код этого класса. –

+0

Код обновлен. Надеемся, что теперь стоит добавить – Timmo

Смежные вопросы