根据文件前缀获取所有可绘制对象并将其存储在 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.xml
或 strings.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);
}
这里有谁知道如何使用 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.xml
或 strings.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);
}