Как получить идентификатор изображения из строкового массива

Только & lt; и & amp; должны быть экранированы, если они должны обрабатываться символьными данными, а не разметкой:

http://www.w3.org/TR/xml11/#syntax

0
задан Younes 17 February 2019 в 18:22
поделиться

2 ответа

Попробуйте строковый массив следующим образом:

<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;
}
}

Надеюсь, это поможет!

0
ответ дан I_A_Mok 17 February 2019 в 18:22
поделиться

для имени изображения, как 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 ]

}

Спасибо.

0
ответ дан Younes 17 February 2019 в 18:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: