2015-01-06 26 views
0

我想幾個ArrayList研究小組的音樂播放器。當前列表爲每首歌曲生成藝術家,而不僅僅是一位藝術家。這應該可以更好地解釋它:分組相同的項目在一個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

在Artist類中你的equals()方法是什麼?給我們這個類的代碼。 –

+0

代碼已更新。希望這現在更有意義 – Timmo

相關問題