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