web-dev-qa-db-fra.com

Utilisation dynamique de setImageDrawable pour définir une image dans un ImageView

Je génère une chaîne de la base de données dynamiquement qui a le même nom d'image dans le dossier drawable.

Maintenant, je veux définir cette valeur pour ImageView en utilisant setImageDrawable(R.id.StringGenerated) de manière dynamique.

Aucune suggestion.. 

105
Arun

Essaye ça,

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

Cela retournera l'id du dessinable auquel vous voulez accéder ... Vous pourrez ensuite définir l'image dans la vue image en procédant comme suit

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

ou

setImageDrawable(getResources().getDrawable(R.drawable.icon));
88
Nikhilreddy Gujjula

Personnellement, je préfère utiliser la méthode setImageResource() comme ceci.

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

Les noms pouvant être dessinés par les ressources ne sont pas stockés sous forme de chaînes. Vous devrez donc résoudre la chaîne en une constante entière générée lors de la construction. Vous pouvez utiliser la classe Resources pour résoudre la chaîne dans cet entier.

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

Cela résout votre chaîne générée dans le nombre entier que la ImageView peut utiliser pour charger la bonne image.

Sinon, vous pouvez utiliser l'id pour charger la Drawable manuellement, puis définir l'image à l'aide de cet élément dessinable au lieu de l'ID de ressource.

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

Aussi simple que cette réponse:

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

Cela fonctionne, au moins dans 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);

Vous pouvez utiliser setImageResource (), mais la documentation indique que "effectue la lecture et le décodage de Bitmap sur le thread d'interface utilisateur, ce qui peut provoquer un hoquet de latence ... envisagez d'utiliser setImageDrawable () ou setImageBitmap ()." comme indiqué par chetto

7
TiagoRL

Toutes les réponses affichées ne s'appliquent pas aujourd'hui. Par exemple, getDrawable () est obsolète. Voici une réponse mise à jour, à la vôtre!

ContextCompat.getDrawable(mContext, drawable)

De méthode documentée

public statique final Android.graphics.drawable.Drawable getDrawable (@NotNull le contexte Android.content.Context,
@ Android.support.annotation.DrawableRes int id

4
portfoliobuilder

Si vous ne pouvez pas obtenir un objet Resources de la sorte dans une classe qui n'est pas une activité, vous devez ajouter la méthode getContext () pour getResources (), par exemple.

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

Vous pouvez essayer d'utiliser ce code:

ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
1
Mersad Nilchy

J'ai eu le même problème que vous et j'ai fait ce qui suit pour le résoudre:

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

Construisez une classe POJO.Java et créez "les méthodes constructor, getter & setter"

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

        public Drawable getProductImagePath() {
                return productImagePath;
        }

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

Puis configurez les adaptateurs via Custom Resources en 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());
        }
    }

Puis passez les références via 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));

    }
}
0
Abdul Gaffar