簡體   English   中英

如何使用哈希圖值填充 RecyclerView?

[英]How can i populate a RecyclerView with hashmap values?

在我為此使用 ArrayList 之前,但由於重復的 Album 問題(我在 API29 之前使用DISTINCTGROUP 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM