ฉันกำลังสร้างสตริงจากฐานข้อมูลแบบไดนามิกซึ่งมีชื่อเดียวกันของรูปภาพในdrawable
โฟลเดอร์
ตอนนี้ฉันต้องการตั้งค่านั้นสำหรับการImageView
ใช้setImageDrawable(R.id.StringGenerated)
แบบไดนามิก
ข้อเสนอแนะใด ๆ ..
ฉันกำลังสร้างสตริงจากฐานข้อมูลแบบไดนามิกซึ่งมีชื่อเดียวกันของรูปภาพในdrawable
โฟลเดอร์
ตอนนี้ฉันต้องการตั้งค่านั้นสำหรับการImageView
ใช้setImageDrawable(R.id.StringGenerated)
แบบไดนามิก
ข้อเสนอแนะใด ๆ ..
คำตอบ:
ลองสิ่งนี้
int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);
สิ่งนี้จะส่งคืน id ของ drawable ที่คุณต้องการเข้าถึง ... จากนั้นคุณสามารถตั้งค่าภาพใน imageview โดยทำดังต่อไปนี้
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);
หรือ
setImageDrawable(getResources().getDrawable(R.drawable.icon));
ฉันเองชอบที่จะใช้วิธีการsetImageResource()
เช่นนี้
ImageView myImageView = (ImageView)findViewById(R.id.myImage);
myImageView.setImageResource(R.drawable.icon);
ชื่อทรัพยากรที่ดึงได้จะไม่ถูกจัดเก็บเป็นสตริงดังนั้นคุณจะต้องแก้ไขสตริงเป็นค่าคงที่จำนวนเต็มที่สร้างขึ้นระหว่างการสร้าง คุณสามารถใช้Resources
คลาสเพื่อแก้ไขสตริงเป็นจำนวนเต็มนั้น
Resources res = getResources();
int resourceId = res.getIdentifier(
generatedString, "drawable", getPackageName() );
imageView.setImageResource( resourceId );
สิ่งนี้จะแก้ไขสตริงที่คุณสร้างขึ้นเป็นจำนวนเต็มที่ImageView
สามารถใช้เพื่อโหลดรูปภาพที่ถูกต้อง
อีกวิธีหนึ่งคือคุณสามารถใช้ id เพื่อโหลดDrawable
ด้วยตนเองจากนั้นตั้งค่ารูปภาพโดยใช้ที่วาดได้แทน ID ทรัพยากร
Drawable drawable = res.getDrawable( resourceId );
imageView.setImageDrawable( drawable );
ง่ายๆเหมือนคำตอบนี้:
Drawable myDrawable = getResources().getDrawable(R.drawable.pic);
imageview.setImageDrawable(myDrawable);
สิ่งนี้ใช้ได้ผลอย่างน้อยใน 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);
คุณสามารถใช้ setImageResource () ได้ แต่เอกสารประกอบระบุว่า "ทำการอ่านและถอดรหัสบิตแมปบนเธรด UI ซึ่งอาจทำให้เกิดอาการสะอึกในเวลาแฝง ... พิจารณาใช้ setImageDrawable () หรือ setImageBitmap ()" ตามที่ระบุไว้โดย chetto
คำตอบทั้งหมดที่โพสต์ใช้ไม่ได้ในวันนี้ ตัวอย่างเช่น getDrawable () เลิกใช้แล้ว นี่คือคำตอบที่อัปเดตไชโย!
ContextCompat.getDrawable(mContext, drawable)
จากเอกสารวิธีการ
android.graphics.drawable สุดท้ายคงที่สาธารณะ getDrawable (@NotNull android.content.Context บริบท
@ android.support.annotation.DrawableRes int id
คุณสามารถลองใช้รหัสนี้:
ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
หากคุณไม่สามารถรับวัตถุทรัพยากรเช่นนี้ในคลาสที่ไม่ใช่กิจกรรมคุณต้องเพิ่มเมธอด getContext () สำหรับ getResources () เช่น
ImageView image = (ImageView) v.findViewById(R.id.item_image);
int id = getContext().getResources().getIdentifier(imageName, "drawable", getContext().getPackageName());
image.setImageResource(id);
imageView.setImageDrawable(getResources().getDrawable(R.drawable.my_drawable));
คุณยังสามารถใช้สิ่งต่างๆเช่น:
imageView.setImageDrawable(ActivityCompat.getDrawable(getContext(),
R.drawable.generatedID));
หรือใช้ Picasso:
Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);
ฉันมีปัญหาเดียวกันกับคุณและฉันได้ดำเนินการต่อไปนี้เพื่อแก้ไข:
**IMAGEVIEW**.setImageResource(getActivity()
.getResources()
.getIdentifier("**IMG**", "drawable", getActivity()
.getPackageName()));
สร้างคลาส POJO.java และสร้าง "constructor, getter & setter method"
class POJO{
public POJO(Drawable proImagePath) {
setProductImagePath(proImagePath);
}
public Drawable getProductImagePath() {
return productImagePath;
}
public void setProductImagePath(Drawable productImagePath) {
this.productImagePath = productImagePath;
}
}
จากนั้นตั้งค่าอะแด็ปเตอร์ผ่านทรัพยากรที่วาดได้ของอิมเมจไปที่ 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());
}
}
จากนั้นส่งการอ้างอิงผ่าน 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));
}
}
ชิ้นส่วนของโครงการของฉันทุกอย่างได้ผล! )
@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());
btnImg.SetImageDrawable (GetDrawable (Resource.Drawable.button_round_green));
API 23 Android 6.0
ไม่สามารถสร้างไฟล์ 'R' ได้ในขณะทำงานของแอป คุณอาจใช้ทางเลือกอื่นเช่นการใช้if-else
หรือswitch-case
R
อีกครั้ง