Получение рисования с использованием для индекса l oop - PullRequest
1 голос
/ 06 марта 2020

Я проектирую пользовательский интерфейс, и для этого нужно заполнить некоторый фиктивный контент для повторного просмотра. Поэтому я подумал создать с помощью l oop, чтобы облегчить жизнь, если я захочу изменить число.

У меня есть нарисованные ресурсы (изображения) с суффиксом чисел. Например,

avatar_1, avatar_2, avatar_3, ...
featured_1, featured_2, featured_3, ...

Я попытался установить R.drwable.featured_ + i и как ожидал, что это не сработает, и в итоге получится ошибка.

Это то, что я использую

...

for (int i = 0; i <= 11; i++) {

    int username = random.nextInt(userNames.length);
    int catInt   = random.nextInt(categories.length);
    int time     = random.nextInt(times.length);

    mBlogs.add(new Blog(
            R.drawable.featured_ + i, // this
            R.drawable.avatar_ + i, // this
            getString(R.string.blog_title),
            categories[catInt],
            getString(R.string.blog_excerpt),
            userNames[username],
            times[time],
            random.nextBoolean(),
            random.nextBoolean()
    ));
}

...

Вопрос: Как я могу получить ресурс в пределах индекса l oop по l oop?

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Попробуйте, как показано ниже.

//find drawable resource id 
public int getDrawableId(Context context, String name) 
{
    try {
        return getResources().getIdentifier(name, "drawable", context.getPackageName());
    } catch (Exception e) {
        e.printStackTrace();
        return -1;
    } 
}
...
for (int i = 0; i <= 11; i++) {
    int username = random.nextInt(userNames.length);
    int catInt   = random.nextInt(categories.length);
    int time     = random.nextInt(times.length);
    int featuredRes = getDrawableId(context, "featured_" + i);
    int avatarRes = getDrawableId(context, "avatar_" + i);

    // if not found any resource
    if (featuredRes == 0) featuredRes = R.drawable.featured_default

    if (avatarRes == 0) avatarRes = R.drawable.avatar_default

    mBlogs.add(new Blog(
            featuredRes,
            avatarRes,
            getString(R.string.blog_title),
            categories[catInt],
            getString(R.string.blog_excerpt),
            userNames[username],
            times[time],
            random.nextBoolean(),
            random.nextBoolean()
    ));
}
...
1 голос
/ 06 марта 2020

Вы можете использовать getIdentifier

for (int i = 0; i <= 11; i++) {
    int featuredResId = getResources().getIdentifier("featured_" + i, "drawable", getPackageName())
    int avatarResId = getResources().getIdentifier("avatar_" + i, "drawable", getPackageName())
    //...
    mBlogs.add(new Blog(
            featuredResId,
            avatarResId,
            //...
    ));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...