Только & lt; и & amp; должны быть экранированы, если они должны обрабатываться символьными данными, а не разметкой:
Попробуйте строковый массив следующим образом:
<string-array name="bookImages">
<item>android_security</item>
<item>penetration_testing</item>
<item>red_team</item>
<item>lf</item>
<item>the_art_of_exploitation</item>
<item>web_application_hacker</item>
<item>lbh</item>
<item>bhp</item>
</string-array>
и адаптер так:
public class BookGrid extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private String[] imageName;
private Integer[] bookImages;
public BookGrid(Context context, String[] imageName) {
this.context = context;
this.imageName = imageName;
this.inflater = LayoutInflater.from(context);
Resources resi = context.getResources();
String[] bookImagesFromString = resi.getStringArray(R.array.bookImages);
bookImages = new Integer[bookImagesFromString.length];
for (int i = 0; i < bookImagesFromString.length; i++) {
bookImages[i] = (resi.getIdentifier(bookImagesFromString[i], "drawable", context.getPackageName()));
}
}
@Override
public int getCount() {
return imageName.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
/*
Resources rest = context.getResources();
String[] labels = rest.getStringArray(R.array.bookLabels);
System.out.println("bookImagess Tex: " + Arrays.toString(labels));
*/
if (convertView == null) {
convertView = inflater.inflate(R.layout.layout_grid_image, parent, false);
}
TextView txtv = convertView.findViewById(R.id.gridtextView);
ImageView imgv = convertView.findViewById(R.id.gridImageView);
txtv.setText(imageName[position]);
imgv.setImageResource(bookImages[position]);
return convertView;
}
}
Надеюсь, это поможет!
для имени изображения, как I_A_Mok сказал, что я взял только:
<string-array name="bookImages">
<item>android_security</item>
<item>penetration_testing</item>
<item>red_team</item>
<item>lf</item>
<item>the_art_of_exploitation</item>
<item>web_application_hacker </item>
<item>lbh </item>
<item>bhp </item>
</string-array>
Итак, у меня было два решения:
Метод с Context: [117 ]
public static Integer[] getIds(Context context, String[] str) {
Integer[] bookID = new Integer[str.length];
for (int i = 0; i < str.length; i++) {
bookID[i] = context.getResources().getIdentifier(str[i], "drawable", context.getPackageName());
}
return bookID;
}
Или без контекста (этот подход быстрее, чем первый Получение ресурсов в Android ):
public static Integer[] getIds(String[] str) {
Integer[] bookID = new Integer[str.length];
try {
for (int i = 0; i < str.length; i++) {
Class res = R.drawable.class;
Field field = res.getField(str[i]);
int drawableId = field.getInt(null);
bookID[i] = drawableId;
}
} catch (Exception e) {
Log.e("MyTag", "Failure to get drawable id.", e);
e.printStackTrace();
}
return bookID;
}
и вот полный код
[113 ]}
Спасибо.