如何将XML中的Drawable数组转为int类型供Recycler Adapter使用?
解决Drawable数组资源ID获取适配Recycler Adapter的问题
嘿,这个问题我之前也碰到过,咱们一步步来搞定它:
首先得搞明白为什么getResources().getIntArray(R.array.clrs)会返回0——你定义的是Drawable引用数组,但getIntArray只能正确解析<integer-array>或者指定type="integer"的数组,类型不匹配自然就返回默认的0值了。
给你两种完美适配setImageResource()的解决方案:
方法一:修改XML数组类型为整数数组(最简单)
直接把你的Drawable数组改成整数类型的数组,这样就能用getIntArray直接拿到资源ID:
<array name="clrs" type="integer"> <item>@drawable/red_bg</item> <item>@drawable/yellow_bg</item> <item>@drawable/green_bg</item> <item>@drawable/white_bg</item> <item>@drawable/white_bg</item> <item>@drawable/white_bg</item> </array>
然后在代码里直接获取使用:
int[] drawableIds = getResources().getIntArray(R.array.clrs); // 拿到ID后直接传给setImageResource myHolder.imageView.setImageResource(drawableIds[position]);
方法二:用TypedArray获取资源ID(不修改XML)
如果不想改动XML的数组定义,那可以用TypedArray的getResourceId()方法直接提取资源ID,而不是获取Drawable对象:
Resources res = getResources(); TypedArray clrsArray = res.obtainTypedArray(R.array.clrs); // 获取对应位置的资源ID,第二个参数是找不到时的默认值 int drawableId = clrsArray.getResourceId(position, 0); // 一定要记得回收TypedArray,避免内存泄漏 clrsArray.recycle(); // 直接传入setImageResource myHolder.imageView.setImageResource(drawableId);
两种方法都能满足你Recycler Adapter里需要int类型资源ID的需求,推荐第一种,更简洁直观~
内容的提问来源于stack exchange,提问作者Nemanja
相关产品推荐
相关产品推荐

