getIdentifier()继续返回0

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了getIdentifier()继续返回0相关的知识,希望对你有一定的参考价值。

我试图在卡片视图上显示图像和标题。代码应从文本文件中获取图像名称,并将其转换为图像已存在于可绘制文件中的图像ID。但是,当我在模拟器上运行代码时,仅显示标题。因此,我使用Log.d来检查值,结果图像的名称已经存在,但是资源ID为0。我一直在寻找相同的问题和解决方案,但没有任何效果。还是有更好的方法在适配器中检索图像的ID?

@Override
public void onBindViewHolder(@NonNull MyRecyclerViewAdapter.MyViewHolder myViewHolder, int i) {

    News news = news_list.get(i);
    myViewHolder.textView_title.setText(news.getNews_title());
    mContext = mContext.getApplicationContext();
    String imageName = news.getImage_name();
    int resID = mContext.getResources().getIdentifier(imageName, "drawable", mContext.getPackageName());
    Log.d("here",news.getImage_name());
    Log.d("here", String.valueOf(resID));
    final String URL = news.getURLs();
    myViewHolder.imageView_image.setImageResource(resID);

以上是我的recyclerviewadapter的onBindViewHolder中的代码,用于在卡片视图中显示标题和图像。

2019-11-10 13:09:00.688 29179-29179/com.example.assignment4_task1 D/here: cyber5.png
2019-11-10 13:09:00.689 29179-29179/com.example.assignment4_task1 D/here: 0

2019-11-10 13:09:00.707 29179-29179/com.example.assignment4_task1 D/here: cyber1.png

2019-11-10 13:09:00.707 29179-29179/com.example.assignment4_task1 D/here: 0

2019-11-10 13:09:00.782 29179-29179/com.example.assignment4_task1 D/here: ai1.png

2019-11-10 13:09:00.782 29179-29179/com.example.assignment4_task1 D/here: 0

2019-11-10 13:09:00.799 29179-29179/com.example.assignment4_task1 D/here: ai3.png

2019-11-10 13:09:00.799 29179-29179/com.example.assignment4_task1 D/here: 0

2019-11-10 13:09:00.824 29179-29179/com.example.assignment4_task1 D/here: cyber5.png

2019-11-10 13:09:00.824 29179-29179/com.example.assignment4_task1 D/here: 0

2019-11-10 13:09:00.842 29179-29179/com.example.assignment4_task1 D/here: ai2.png

2019-11-10 13:09:00.842 29179-29179/com.example.assignment4_task1 D/here: 0

2019-11-10 13:09:00.860 29179-29179/com.example.assignment4_task1 D/here: ai4.png

2019-11-10 13:09:00.861 29179-29179/com.example.assignment4_task1 D/here: 0

以上是Logcat的结果。图像名称已经存在,我没有故意在名称后加上+“。png”,但是资源ID仍返回0。

答案

从您的资源名称中删除.png。 getIdentifier无需文件扩展名即可工作。

String imageName = news.getImage_name().substring(0, str.lastIndexOf('.'))

如果要使用文件扩展名,请使用assets文件夹(我认为最好使用assets文件夹:]

Drawable d = Drawable.createFromStream(getAssets().open("Images/image_name.png"), null);

以上是关于getIdentifier()继续返回0的主要内容,如果未能解决你的问题,请参考以下文章

安卓使用getResources().getIdentifier()动态的根据一个资源名获得到对应的资源id

Android使用getIdentifier()方法根据资源名来获取资源id

当活动被破坏但我必须继续执行片段中的代码时该怎么办?

Python snippet(代码片段)

android 动态获取ID通过Resources的 getIdentifier 方法

以下代码片段的时间复杂度是多少?