Динамическое использование setImageDrawable для установки изображения в ImageView

Я генерирую строку из базы данных динамически, которая имеет то же имя изображения в папке drawable.

Теперь я хочу установить это значение для ImageView с помощью setImageDrawable(R.id.StringGenerated) динамически.

Любые предложения..

Ответ 1

Попробуйте это,

int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);

Это вернет идентификатор выталкиваемого объекта, к которому вы хотите получить доступ... то вы можете установить изображение в режиме просмотра изображений, выполнив следующие

imageview.setImageResource(id);

Ответ 2

Drawable image = ImageOperations(context,ed.toString(),"image.jpg");
            ImageView imgView = new ImageView(context);
            imgView = (ImageView)findViewById(R.id.image1);
            imgView.setImageDrawable(image);

или

setImageDrawable(getResources().getDrawable(R.drawable.icon));

Ответ 3

Я лично предпочитаю использовать метод setImageResource() следующим образом.

ImageView myImageView = (ImageView)findViewById(R.id.myImage);
myImageView.setImageResource(R.drawable.icon);

Ответ 4

Имена ресурса, которые можно использовать, не сохраняются в виде строк, поэтому вам придется разрешить строку в целочисленную константу, сгенерированную во время сборки. Вы можете использовать класс Resources для преобразования строки в это целое число.

Resources res = getResources();
int resourceId = res.getIdentifier(
   generatedString, "drawable", getPackageName() );
imageView.setImageResource( resourceId );

Это разрешает вашу сгенерированную строку в целое число, которое ImageView может использовать для загрузки правильного изображения.

В качестве альтернативы вы можете использовать идентификатор для загрузки Drawable вручную, а затем установить образ, используя этот метод, вместо идентификатора ресурса.

Drawable drawable = res.getDrawable( resourceId );
imageView.setImageDrawable( drawable );

Ответ 5

Проще, как этот ответ:

Drawable myDrawable = getResources().getDrawable(R.drawable.pic);
imageview.setImageDrawable(myDrawable);

Ответ 6

Это работает, по крайней мере, в Android API 15

ImageView = imgv;
Resources res = getResources(); // need this to fetch the drawable
Drawable draw = res.getDrawable( R.drawable.image_name_in_drawable );
imgv.setImageDrawable(draw);

Вы можете использовать setImageResource(), но в документации указывается, что "делает растровое чтение и декодирование в потоке пользовательского интерфейса, что может вызвать задержку икры... рассмотрим использование setImageDrawable() или setImageBitmap()". как указано chetto

Ответ 7

Если вы не можете получить ресурс таким ресурсом, как этот, в классе, который не является активностью, вам нужно добавить метод getContext() для getResources(), например

ImageView image = (ImageView) v.findViewById(R.id.item_image);
int id = getContext().getResources().getIdentifier(imageName, "drawable", getContext().getPackageName());
image.setImageResource(id);

Ответ 8

Вы также можете использовать что-то вроде:

imageView.setImageDrawable(ActivityCompat.getDrawable(getContext(), R.drawable.generatedID));

или используя Picasso:

Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);

Ответ 9

Все опубликованные ответы не применяются сегодня. Например, функция getDrawable() устарела. Вот обновленный ответ, приветствия!

ContextCompat.getDrawable(mContext, drawable)

Из документального метода

public static final android.graphics.drawable.Drawable getDrawable (@NotNull android.content.Context context,
@android.support.annotation.DrawableRes int id

Ответ 10

У меня была такая же проблема, как и вы, и я решил сделать следующее:

**IMAGEVIEW**.setImageResource(getActivity()
             .getResources()
             .getIdentifier("**IMG**", "drawable", getActivity()
             .getPackageName()));

Ответ 11

Создайте класс POJO.java и создайте "методы конструктора, метода getter и setter"

class POJO{
        public POJO(Drawable proImagePath) {
                setProductImagePath(proImagePath);
        }

        public Drawable getProductImagePath() {
                return productImagePath;
        }

        public void setProductImagePath(Drawable productImagePath) {
                this.productImagePath = productImagePath;
        }
}

Затем настройте адаптеры через ресурсы для рисования в CustomAdapter.java

    class CustomAdapter extends ArrayAdapter<POJO>{

       private ArrayList<POJO> cartList = new ArrayList<POJO>();
       public MyCartAdapter(Context context, int resource) {
          super(context, resource);
       }

       public MyCartAdapter(Context context, ArrayList<POJO> cartList) {
          super(context, 0, cartList);
          this.context = context;
          this.cartList = cartList;

       }

       @Override
       public View getView(int position, View convertView, ViewGroup parent) {
          /*
          *Here you can setup your layout and references.
          **/
          ImageView productImage = (ImageView) rootView.findViewById(R.id.cart_pro_image);
          productImage.setImageDrawable(POJO.getProductImagePath());
        }
    }

Затем передайте ссылки через ActivityClass.java

public class MyCartActivity extends AppCompatActivity{
       POJO pojo;
       CustomAdapter customAdapter;
       ArrayList<POJO> cartList = new ArrayList<POJO>();

       @Override
       protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.your_layout);

          customAdapter = new CustomAdapter(this, cartList);

          pojo = new POJO(getResources().getDrawable(R.drawable.help_green));

    }
}

Ответ 12

часть моего проекта, все работает! )

@Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        final ModelSystemTraining modelSystemTraining = items.get(position);

int icon = context.getResources().getIdentifier(String.valueOf(modelSystemTraining.getItemIcon()), "drawable", context.getPackageName());

        final FragmentViewHolderSystem fragmentViewHolderSystem = (FragmentViewHolderSystem) holder;
        final View itemView = fragmentViewHolderSystem.itemView;
//                Set Icon
fragmentViewHolderSystem.trainingIconImage.setImageResource(icon);
//                Set Title
fragmentViewHolderSystem.title.setText(modelSystemTraining.getItemTitle());
//                Set Desc
fragmentViewHolderSystem.description.setText(modelSystemTraining.getItemDescription());

Ответ 13

Файл "R" не может быть создан во время выполнения приложения. Вы можете использовать некоторые другие альтернативы, такие как использование if-else или switch-case