답변:
이 시도,
int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);
이렇게하면 액세스하려는 드로어 블의 ID가 반환됩니다. 그러면 다음을 수행하여 이미지 뷰에서 이미지를 설정할 수 있습니다.
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 );
이것은 적어도 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)
문서화 된 방법에서
public static final android.graphics.drawable.Drawable getDrawable (@NotNull android.content.Context context,
@ android.support.annotation.DrawableRes int id
이 코드를 사용해 볼 수 있습니다.
ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
Activity가 아닌 클래스에서 이와 같은 Resources 객체를 가져올 수없는 경우 getResources ()에 대한 getContext () 메서드를 추가해야합니다.
ImageView image = (ImageView) v.findViewById(R.id.item_image);
int id = getContext().getResources().getIdentifier(imageName, "drawable", getContext().getPackageName());
image.setImageResource(id);
POJO.java 클래스를 생성하고 "생성자, 게터 및 세터 메서드"를 생성합니다.
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());
앱 실행시 'R'파일을 생성 할 수 없습니다. 사용 if-else
또는 사용과 같은 다른 대안을 사용할 수 있습니다.switch-case
R
다시