Sto generando dinamicamente una stringa dal database che ha lo stesso nome dell'immagine nella drawable
cartella.
Ora voglio impostare quel valore per l' ImageView
utilizzo setImageDrawable(R.id.StringGenerated)
dinamico.
Eventuali suggerimenti..
Sto generando dinamicamente una stringa dal database che ha lo stesso nome dell'immagine nella drawable
cartella.
Ora voglio impostare quel valore per l' ImageView
utilizzo setImageDrawable(R.id.StringGenerated)
dinamico.
Eventuali suggerimenti..
Risposte:
Prova questo,
int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);
Questo restituirà l'id del disegnabile a cui vuoi accedere ... quindi puoi impostare l'immagine nella visualizzazione immagine procedendo come segue
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);
o
setImageDrawable(getResources().getDrawable(R.drawable.icon));
Personalmente preferisco usare il metodo in setImageResource()
questo modo.
ImageView myImageView = (ImageView)findViewById(R.id.myImage);
myImageView.setImageResource(R.drawable.icon);
I nomi disegnabili delle risorse non vengono memorizzati come stringhe, quindi dovrai risolvere la stringa nella costante intera generata durante la compilazione. Puoi usare la Resources
classe per risolvere la stringa in quel numero intero.
Resources res = getResources();
int resourceId = res.getIdentifier(
generatedString, "drawable", getPackageName() );
imageView.setImageResource( resourceId );
Questo risolve la stringa generata nel numero intero che ImageView
può utilizzare per caricare l'immagine giusta.
In alternativa, puoi utilizzare l'ID per caricare Drawable
manualmente e quindi impostare l'immagine utilizzando quel disegnabile invece dell'ID risorsa.
Drawable drawable = res.getDrawable( resourceId );
imageView.setImageDrawable( drawable );
Semplice come questa risposta:
Drawable myDrawable = getResources().getDrawable(R.drawable.pic);
imageview.setImageDrawable(myDrawable);
Funziona, almeno nell'API 15 di Android
ImageView = imgv;
Resources res = getResources(); // need this to fetch the drawable
Drawable draw = res.getDrawable( R.drawable.image_name_in_drawable );
imgv.setImageDrawable(draw);
È possibile utilizzare setImageResource (), ma la documentazione specifica che "legge e decodifica Bitmap sul thread dell'interfaccia utente, il che può causare un singhiozzo di latenza ... considera l'utilizzo di setImageDrawable () o setImageBitmap ()." come affermato da chetto
Tutte le risposte pubblicate non si applicano oggi. Ad esempio, getDrawable () è deprecato. Ecco una risposta aggiornata, saluti!
ContextCompat.getDrawable(mContext, drawable)
Dal metodo documentato
public static final android.graphics.drawable.Drawable getDrawable (@NotNull contesto android.content.Context,
@ android.support.annotation.DrawableRes int id
Puoi provare a usare questo codice:
ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
Se non puoi ottenere un oggetto Resources come questo in una classe che non è un'attività, devi aggiungere il metodo getContext () per getResources () per esempio
ImageView image = (ImageView) v.findViewById(R.id.item_image);
int id = getContext().getResources().getIdentifier(imageName, "drawable", getContext().getPackageName());
image.setImageResource(id);
Puoi anche usare qualcosa come:
imageView.setImageDrawable(ActivityCompat.getDrawable(getContext(),
R.drawable.generatedID));
o usando Picasso:
Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);
Costruisci una classe POJO.java e crea "metodi di costruzione, getter e setter"
class POJO{
public POJO(Drawable proImagePath) {
setProductImagePath(proImagePath);
}
public Drawable getProductImagePath() {
return productImagePath;
}
public void setProductImagePath(Drawable productImagePath) {
this.productImagePath = productImagePath;
}
}
Quindi configurare gli adattatori tramite le risorse disegnabili di immagini su 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());
}
}
Quindi passare i riferimenti tramite 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));
}
}
un pezzo del mio progetto, funziona tutto! )
@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());
Il file "R" non può essere generato in fase di esecuzione dell'app. È possibile utilizzare altre alternative come l'utilizzo di if-else
oswitch-case
R
nuovo