Veritabanından dinamik olarak drawable
klasörde aynı görüntü adına sahip bir dize oluşturuyorum .
Şimdi bu değeri dinamik olarak ImageView
kullanmak için ayarlamak istiyorum setImageDrawable(R.id.StringGenerated)
.
Baska öneri..
Veritabanından dinamik olarak drawable
klasörde aynı görüntü adına sahip bir dize oluşturuyorum .
Şimdi bu değeri dinamik olarak ImageView
kullanmak için ayarlamak istiyorum setImageDrawable(R.id.StringGenerated)
.
Baska öneri..
Yanıtlar:
Bunu dene,
int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);
Bu, erişmek istediğiniz çekilebilir dosyanın kimliğini döndürecektir ... ardından aşağıdakileri yaparak görüntü görünümünde görüntüyü ayarlayabilirsiniz.
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);
veya
setImageDrawable(getResources().getDrawable(R.drawable.icon));
Ben şahsen bu yöntemi kullanmayı tercih ediyorum setImageResource()
.
ImageView myImageView = (ImageView)findViewById(R.id.myImage);
myImageView.setImageResource(R.drawable.icon);
Çekilebilir kaynak adları dizeler olarak depolanmaz, bu nedenle dizeyi derleme sırasında oluşturulan tamsayı sabitine çözümlemeniz gerekir. Resources
Dizeyi bu tam sayıya çözümlemek için sınıfı kullanabilirsiniz .
Resources res = getResources();
int resourceId = res.getIdentifier(
generatedString, "drawable", getPackageName() );
imageView.setImageResource( resourceId );
Bu, oluşturduğunuz dizeyi ImageView
doğru görüntüyü yüklemek için kullanabileceğiniz tam sayıya dönüştürür .
Alternatif olarak, kimliği Drawable
manuel olarak yüklemek için kullanabilir ve ardından görüntüyü kaynak kimliği yerine bu çekilebilirliği kullanarak ayarlayabilirsiniz.
Drawable drawable = res.getDrawable( resourceId );
imageView.setImageDrawable( drawable );
Bu cevap kadar basit:
Drawable myDrawable = getResources().getDrawable(R.drawable.pic);
imageview.setImageDrawable(myDrawable);
Bu, en azından Android API 15'te çalışır
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 () kullanabilirsiniz, ancak dokümantasyon "UI iş parçacığında Bitmap okuma ve kod çözme yapar, bu da bir gecikme hıçkırığına neden olabilir ... setImageDrawable () veya setImageBitmap () kullanmayı düşünün." chetto tarafından belirtildiği gibi
Gönderilen tüm cevaplar bugün geçerli değildir. Örneğin, getDrawable () kullanımdan kaldırılmıştır. İşte güncellenmiş bir cevap, şerefe!
ContextCompat.getDrawable(mContext, drawable)
Belgelenen yöntemden
public static final android.graphics.drawable.Drawable getDrawable (@NotNull android.content.Context bağlamı,
@ android.support.annotation.DrawableRes int id
Bu kodu kullanmayı deneyebilirsiniz:
ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
Activity olmayan bir sınıfta bunun gibi Resources nesnesini alamazsanız, örneğin getResources () için getContext () yöntemini eklemeniz gerekir.
ImageView image = (ImageView) v.findViewById(R.id.item_image);
int id = getContext().getResources().getIdentifier(imageName, "drawable", getContext().getPackageName());
image.setImageResource(id);
Ayrıca aşağıdaki gibi bir şey de kullanabilirsiniz:
imageView.setImageDrawable(ActivityCompat.getDrawable(getContext(),
R.drawable.generatedID));
veya Picasso kullanarak:
Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);
Bir POJO.java sınıfı oluşturun ve "yapıcı, alıcı ve ayarlayıcı yöntemleri" oluşturun
class POJO{
public POJO(Drawable proImagePath) {
setProductImagePath(proImagePath);
}
public Drawable getProductImagePath() {
return productImagePath;
}
public void setProductImagePath(Drawable productImagePath) {
this.productImagePath = productImagePath;
}
}
Ardından adaptörleri, CustomAdapter.java için resim çekilebilir kaynakları aracılığıyla ayarlayın.
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());
}
}
Ardından referansları ActivityClass.java üzerinden geçirin
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));
}
}
projemin bir parçası, her şey çalışıyor! )
@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());
'R' dosyası, uygulamanın çalışma zamanında oluşturulamaz. Kullanmak gibi başka alternatifler de kullanabilirsiniz if-else
veyaswitch-case
R
yeniden üretmeye çalışmak yerine, zaten var olan bir kaynağa bir görüntü görünümü oluşturmaya çalışıyor