Câu trả lời:
Thử cái này,
int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);
Thao tác này sẽ trả về id của tệp có thể vẽ mà bạn muốn truy cập ... sau đó bạn có thể đặt hình ảnh trong chế độ xem hình ảnh bằng cách thực hiện như sau
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);
hoặc là
setImageDrawable(getResources().getDrawable(R.drawable.icon));
Cá nhân tôi thích sử dụng phương pháp setImageResource()
như thế này.
ImageView myImageView = (ImageView)findViewById(R.id.myImage);
myImageView.setImageResource(R.drawable.icon);
Các tên có thể vẽ được của tài nguyên không được lưu trữ dưới dạng chuỗi, vì vậy bạn sẽ phải phân giải chuỗi thành hằng số nguyên được tạo trong quá trình xây dựng. Bạn có thể sử dụng Resources
lớp để phân giải chuỗi thành số nguyên đó.
Resources res = getResources();
int resourceId = res.getIdentifier(
generatedString, "drawable", getPackageName() );
imageView.setImageResource( resourceId );
Điều này giải quyết chuỗi đã tạo của bạn thành số nguyên ImageView
có thể sử dụng để tải hình ảnh phù hợp.
Ngoài ra, bạn có thể sử dụng id để tải Drawable
thủ công và sau đó đặt hình ảnh bằng cách sử dụng có thể vẽ đó thay vì ID tài nguyên.
Drawable drawable = res.getDrawable( resourceId );
imageView.setImageDrawable( drawable );
Đơn giản như câu trả lời này:
Drawable myDrawable = getResources().getDrawable(R.drawable.pic);
imageview.setImageDrawable(myDrawable);
Điều này hoạt động, ít nhất là trong 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);
Bạn có thể sử dụng setImageResource (), nhưng tài liệu chỉ định rằng "đọc và giải mã Bitmap trên chuỗi giao diện người dùng, điều này có thể gây ra lỗi độ trễ ... hãy xem xét sử dụng setImageDrawable () hoặc setImageBitmap ()." như đã nói bởi chetto
Tất cả các câu trả lời được đăng không áp dụng ngày hôm nay. Ví dụ: getDrawable () không được dùng nữa. Đây là một câu trả lời được cập nhật, chúc mừng!
ContextCompat.getDrawable(mContext, drawable)
Từ phương pháp tài liệu
public static final android.graphics.drawable.Drawable getDrawable (@NotNull android.content.Context context,
@ android.support.annotation.DrawableRes int id
Bạn có thể thử sử dụng mã này:
ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
Nếu bạn không thể nhận đối tượng Tài nguyên như thế này trong một lớp không phải là Hoạt động, bạn phải thêm phương thức getContext () cho getResources () chẳng hạn
ImageView image = (ImageView) v.findViewById(R.id.item_image);
int id = getContext().getResources().getIdentifier(imageName, "drawable", getContext().getPackageName());
image.setImageResource(id);
Bạn cũng có thể sử dụng một cái gì đó như:
imageView.setImageDrawable(ActivityCompat.getDrawable(getContext(),
R.drawable.generatedID));
hoặc sử dụng Picasso:
Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);
Xây dựng lớp POJO.java và tạo "phương thức constructor, getter & setter"
class POJO{
public POJO(Drawable proImagePath) {
setProductImagePath(proImagePath);
}
public Drawable getProductImagePath() {
return productImagePath;
}
public void setProductImagePath(Drawable productImagePath) {
this.productImagePath = productImagePath;
}
}
Sau đó, thiết lập các bộ điều hợp thông qua các tài nguyên có thể vẽ hình ảnh thành 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());
}
}
Sau đó, chuyển các tham chiếu qua 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));
}
}
một phần trong dự án của tôi, mọi thứ đều hoạt động! )
@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());
Không thể tạo tệp 'R' tại thời điểm chạy ứng dụng. Bạn có thể sử dụng một số lựa chọn thay thế khác như sử dụng if-else
hoặcswitch-case
R
một lần nữa