具有来自服务器数据的不同图像的回收器视图

recycler view with different images from serverdata

我从我的服务器请求中获取了一个字符串,请求我的 recyclerview 中的一个项目,它给我 PDF Word 或图像。现在我想在我的 recyclerviewitem 中为每个字符串显示不同的图像。这是我的代码:

@Override
public void onBindViewHolder(ScriptViewHolder holder, int position) {

    final ItemObject currentScript = scriptObjects.get(position);

    holder.scriptName.setText(currentScript.getScriptName());
    holder.scriptDate.setText(currentScript.getScriptDate());
    holder.scriptUser.setText(currentScript.getScriptUser());

    String whichformat = currentScript.getScriptFormat();
    switch (whichformat) {
        case "PDF":
            imagename = "ic_picture_as_pdf_black_24dp.png";
        case "Word":
            imagename = "ic_insert_drive_file_black_24dp.png";
        case "Image":
            imagename = "ic_photo_library_black_24dp.png";
    }

    int resourceId = context.getResources().getIdentifier(imagename, null , null );
    holder.scriptIcon.setImageDrawable(ContextCompat.getDrawable(context, resourceId));

我收到一个错误:

致命异常:主要 进程:com.ndlp.socialstudy,PID:3481 android.content.res.Resources$NotFoundException: 资源 ID #0x0

它指向我的回收适配器 class 和:

holder.scriptIcon.setImageDrawable(ContextCompat.getDrawable(context, resourceId));

你知道我做错了什么吗? switch里面的图片名是对的我已经查过了

我也试过了:

 int resourceId = context.getResources().getIdentifier(imageName, "drawable" , context.getPackageName() );

亲切的问候

hellownero

你应该通过这种方式获取resourceId:

switch (whichformat) {
        case "PDF":
            imagename = "ic_picture_as_pdf_black_24dp";
        case "Word":
            imagename = "ic_insert_drive_file_black_24dp";
        case "Image":
            imagename = "ic_photo_library_black_24dp";
}

int resourceId = context.getResources().getIdentifier(imagename, "drawable", context.getPackageName());

您遇到此异常是因为您将 null 作为 defTypepackageName 传递。您不需要将文件类型作为图像名称传递。