我目前正在使用音乐播放器应用程序,可绘制文件夹中有一些图像,这些图像要按特定顺序显示。我发现必须使用getResources().getIdentifier()方法,但是所有歌曲的图片总是相同的。那么我该如何解决呢?
这是我的代码:

@Override
public void onBindViewHolder( SingerListAdapter.SingerListViewHolder viewHolder, int i) {
    String drawableAddress = "R.drawable.gray_rectangle_"+i;
   viewHolder.singerName.setText(musicDataModel.get(i).getmAtrist());
   if(i != 47){
       int idResource = context.getResources().getIdentifier(drawableAddress,"drawable",context.getPackageName());
       viewHolder.singerMusicCover.setImageResource(idResource);
   }
   viewHolder.singerMusicCover.setImageResource(R.drawable.gray_rectangle_5);
}


注意我的musicDataModel变量包含所有歌曲及其信息,并且可以正常工作。
并且同一张图片始终是gray_rectangle_5

最佳答案

您必须从字符串R.drawable中删除​​前缀drawableAddress,因此请更改:

String drawableAddress = "R.drawable.gray_rectangle_"+i;


至:

String drawableAddress = "gray_rectangle_"+i;


if块中,当i != 47时,您可以正确设置图像,但是当代码退出if块时,它将图像设置为R.drawable.gray_rectangle_5,这就是为什么您总是看到此图像的原因。
也许您应该在else语句中添加一个if部分,假设这是i = 47时您想要的图像:

@Override
public void onBindViewHolder( SingerListAdapter.SingerListViewHolder viewHolder, int i) {
    String drawableAddress = "gray_rectangle_" + i;
    viewHolder.singerName.setText(musicDataModel.get(i).getmAtrist());
    if (i != 47) {
        int idResource = context.getResources().getIdentifier(drawableAddress,"drawable",context.getPackageName());
        viewHolder.singerMusicCover.setImageResource(idResource);
    } else {
        viewHolder.singerMusicCover.setImageResource(R.drawable.gray_rectangle_5);
    }
}

09-26 03:32
查看更多