我如何用哈希图值填充RecyclerView?

问题描述 投票:1回答:1

[在我为此使用ArrayList之前,但是由于存在重复的专辑问题(我在API29之前通过使用DISTINCTGROUP BY语句解决了此问题),这些问题不再允许在查询中使用。

我在RecyclerViews适配器中获得了这样的值: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();
}
java android android-recyclerview hashmap
1个回答
1
投票

根据定义,HashMap未排序,所以SortedMap怎么样? SortedMap的实现是TreeMap,它对条目根据键(或Comparator)进行排序。

我相信这很适合您,因为您的地图使用整数作为键。

编辑:您可以在适配器中使用List或任何适合您的集合。例如,保留对ID和专辑的引用,这是您希望通过适配器显示的数据。

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];
© www.soinside.com 2019 - 2024. All rights reserved.