Android Приведение имени строки к R.drawable.name - PullRequest
0 голосов
/ 04 апреля 2020

Внутри моего android приложения мне нужно создать функцию внутри класса MyAdapter, который используется внутри Activity MyActivity (которая не является MainActivity). Функция должна иметь следующую структуру

public int getDrawableResourceId(String name) {
    // naive explanation
    return R.drawable. + name
}

Например, если я вызову getDrawableResorceId("test"), она должна вернуть целочисленное значение R.drawable.test. Я не могу работать с int drawableResourceId = getResources().getIdentifier(name, "drawable", getPackageName());, потому что Android Studio сообщает, что не может разрешить методы getResources() и getPackageName(). Если я заменю его на

int drawableResourceId = MyActivity.this
                                   .getResources()
                                   .getIdentifier(name, "drawable", MyActivity.this.getPackageName());

или

int drawableResourceId = MainActivity.this
                                     .getResources()
                                     .getIdentifier(name, "drawable", MainActivity.this.getPackageName());

Android Studio скажет мне, что Activity не является включающим классом. Вот почему я прямо хочу бросить строку в R.drawable.name.

1 Ответ

1 голос
/ 04 апреля 2020

Извините, я отредактировал свой ответ, но имел в виду неправильный вопрос:

public static int getDrawable(Context context, String name) {
   return context.getResources().getIdentifier(name, "drawable", context.getPackageName());
}

Обновление *

Поскольку вы находитесь в адаптере, скажем, у вас есть MyAdapter в качестве имени класса:

public class MyAdapter{

    private Context mContext;

    public MyAdapter(Context context){
        mContext = context;
    }
....

Тогда ниже вы можете легко позвонить:

getDrawable(mContext, "name")
...