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..
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);
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));
Personnellement, je préfère utiliser la méthode setImageResource()
comme ceci.
ImageView myImageView = (ImageView)findViewById(R.id.myImage);
myImageView.setImageResource(R.drawable.icon);
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 );
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 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
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
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);
Vous pouvez essayer d'utiliser ce code:
ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
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()));
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));
}
}