根据文件前缀获取所有可绘制对象并将其存储在 Int 数组中

Get all drawables base on file prefix and store it on Array of Int

这里有谁知道如何使用 java.lang.reflect.Field 将检索到的可绘制对象存储到 int[] lips = new int[] {},以便我可以在我的列表视图中使用它。

java.lang.reflect.Field[] drawables = R.drawable.class.getFields();
    lips = new int[20];
    for (java.lang.reflect.Field f : drawables) {
        try {
            if(f.getName().contains("l_1_")){
                System.out.println("R.drawable." + f.getName());    
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


OUTPUT:

10-25 09:35:20.748: I/System.out(14461): R.drawable.l_1_1
10-25 09:35:20.748: I/System.out(14461): R.drawable.l_1_2
10-25 09:35:20.748: I/System.out(14461): R.drawable.l_1_3
10-25 09:35:20.748: I/System.out(14461): R.drawable.l_1_4

您应该使用 getDeclaredFields() 而不是 getFields,并且您还应该使用 drawableResources 作为

final Field[] fields =  R.drawable.class.getDeclaredFields();
final R.drawable drawableResources = new R.drawable();
List<Integer> lipsList = new ArrayList<>();
int resId;
for (int i = 0; i < fields.length; i++) {
    try {
        if (fields[i].getName().contains("l_1_")){
            resId = fields[i].getInt(drawableResources);
            lipsList.add(resId);
        }
    } catch (Exception e) {
        continue;
    }
}

取自here

更好的方法是将与列表相关的资源存储在 arrays.xmlstrings.xml 文件中的 integer-array 中,如下所示

<integer-array name="images_for_my_list">
    <item>@drawable/abc_menu_hardkey_panel_mtrl_mult</item>
    <item>@drawable/mylist_img_2</item>
    <item>@drawable/abc_menu_hardkey_panel_mtrl_mult</item>
    <item>@drawable/mylist_img_3</item>
</integer-array>

并将其用作

    TypedArray tArray = mcontext.getResources().obtainTypedArray(
            R.array.images_for_list);
    int count = tArray.length();
    int[] ids = new int[count];
    for (int i = 0; i < ids.length; i++) {
        ids[i] = tArray.getResourceId(i, 0);
        // How to Use it
        // setImageResource(ids[position]);
        // Or
      //  Drawable drawable = ContextCompat.getDrawable(mContext.getApplicationContext(),ids[position])
  // imageView.setImageDrawable(drawable);
    }