[英]How can i populate a RecyclerView with hashmap values?
在我為此使用 ArrayList 之前,但由於重復的 Album 問題(我在 API29 之前使用DISTINCT
和GROUP BY
語句解決了該問題),不再允許在查詢中使用這些問題。
我在 RecyclerViews Adapter 中得到了這樣的值: myArrayList.get(position).getAlbum();
但是現在我正在使用HashMap ,我如何通過從適配器獲得的位置獲取值?
在Hashmap中添加值的代碼
HashMap<Integer, Album> albums = new HashMap<>();
String[] projection2 = { MediaStore.Audio.Media.ALBUM_ID,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.IS_MUSIC};
String selection = MediaStore.Audio.Media.IS_MUSIC + "!=0";
String sort = MediaStore.Audio.Media.ALBUM + " COLLATE NOCASE ASC";
cursor = resolver.query(musicUri, projection2, selection, null, sort);
try {
if (cursor != null) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
int columnAlbumId = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID);
int columnAlbumName = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM);
String albumId = cursor.getString(columnAlbumId);
String albumName = cursor.getString(columnAlbumName);
if(albums.containsKey(albumId) == false){
Album album = new Album(albumId, albumName);
albums.put(albumId, album);
}
cursor.moveToNext();
}
}
}catch (Exception e){
Log.e(TAG, "Exception caught when creating ALBUM!", e);
throw new Exception();
}
根據定義, HashMap
沒有排序,那么SortedMap
怎么樣? SortedMap
一個實現是TreeMap
,它根據鍵(或Comparator
)對條目進行排序。
我相信這適合您,因為您的地圖以整數作為鍵。
編輯:您可以在適配器中使用List
或任何適合您的集合。 例如,保留對 ids 和專輯的引用,這是您有興趣通過適配器顯示的數據。
private int[] ids;
private Album[] albums;
當您將數據(包含在映射中)傳遞到適配器時,您可以提取該數據並將其放置在數組容器中,以便您可以利用索引。 例如,
public MyAdapter(Map<Integer,Album> data){
ids = new int[map.size()];
albums = new Album[map.size()];
int i = 0;
for (Map.Entry<Integer,Album> e : map.entrySet()){
ids[i] = e.getKey();
albums[i++] = e.getValue();
}
}
現在你有了你的數組,如果你願意,你也可以對它們進行排序,如果你想獲取第三張專輯及其 ID,你需要做的就是,
int id = ids[2];
Album album = albums[2];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.