Utilisation de setImageDrawable de manière dynamic pour définir une image dans un ImageView

Je génère une chaîne à partir de la firebase database dynamicment qui a le même nom d’image dans le dossier drawable .

Maintenant, je veux définir cette valeur pour setImageDrawable(R.id.SsortingngGenerated) utilisant setImageDrawable(R.id.SsortingngGenerated) manière dynamic.

Aucune suggestion..

Essaye ça,

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

Cela retournera l’id du dessinable auquel vous voulez accéder … alors vous pouvez définir l’image dans l’imageview en procédant comme suit

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

ou

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

setImageResource() je préfère utiliser la méthode setImageResource() comme ça.

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

Les noms de ressources pouvant être dessinés ne sont pas stockés en tant que chaînes, vous devrez donc résoudre la chaîne dans la constante entière générée lors de la génération. Vous pouvez utiliser la classe Resources pour résoudre la chaîne dans cet entier.

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

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

Alternativement, vous pouvez utiliser l’ID pour charger manuellement le Drawable , puis définir l’image en utilisant ce dessin au lieu de l’ID de la ressource.

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

Aussi simple que cette réponse:

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

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 spécifie que “Bitmap lit et décode sur le thread d’interface utilisateur, ce qui peut provoquer un problème de latence … envisagez d’utiliser setImageDrawable () ou setImageBitmap ().” comme indiqué par chetto

Si vous ne pouvez pas obtenir d’object Resources comme celui-ci dans une classe qui n’est pas une activité, vous devez append 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); 

Vous pouvez également utiliser quelque chose comme:

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

ou en utilisant Picasso:

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

Toutes les réponses postées ne s’appliquent pas aujourd’hui. Par exemple, getDrawable () est obsolète. Voici une réponse mise à jour, bravo!

 ContextCompat.getDrawable(mContext, drawable) 

De méthode documentée

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

J’ai eu le même problème que vous et moi pour résoudre le problème:

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

Construire une classe POJO.java et créer “méthodes constructeur, getter et setter”

 class POJO{ public POJO(Drawable proImagePath) { setProductImagePath(proImagePath); } public Drawable getProductImagePath() { return productImagePath; } public void setProductImagePath(Drawable productImagePath) { this.productImagePath = productImagePath; } } 

Ensuite, configurez les adaptateurs à l’aide de ressources pouvant être dessinées par l’image pour CustomAdapter.java

  class CustomAdapter extends ArrayAdapter{ private ArrayList cartList = new ArrayList(); public MyCartAdapter(Context context, int resource) { super(context, resource); } public MyCartAdapter(Context context, ArrayList 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()); } } 

Passez ensuite les références à ActivityClass.java

 public class MyCartActivity extends AppCompatActivity{ POJO pojo; CustomAdapter customAdapter; ArrayList cartList = new ArrayList(); @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)); } } 

imageView.setImageDrawable(getResources().getDrawable(R.drawable.my_drawable));

btnImg.SetImageDrawable (GetDrawable (Resource.Drawable.button_round_green));

API 23 Android 6.0

une partie de mon projet, tout fonctionne! )

 @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { final ModelSystemTraining modelSystemTraining = items.get(position); int icon = context.getResources().getIdentifier(Ssortingng.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()); 

Le fichier ‘R’ ne peut pas être généré à l’exécution de l’application. Vous pouvez utiliser d’autres alternatives telles que l’utilisation de if-else ou switch-case