Я динамічно генерую рядок із бази даних, яка має те саме ім’я зображення в drawable
папці.
Тепер я хочу встановити це значення для динамічного ImageView
використання setImageDrawable(R.id.StringGenerated)
.
Будь-які пропозиції..
Я динамічно генерую рядок із бази даних, яка має те саме ім’я зображення в drawable
папці.
Тепер я хочу встановити це значення для динамічного ImageView
використання setImageDrawable(R.id.StringGenerated)
.
Будь-які пропозиції..
Відповіді:
Спробуйте це,
int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);
Це поверне ідентифікатор, який можна отримати, до якого ви хочете отримати доступ ... тоді ви можете встановити зображення в перегляді зображень, виконавши наступне
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
може використовуватись для завантаження потрібного зображення.
Крім того, ви можете використовувати ідентифікатор для завантаження Drawable
вручну, а потім встановити зображення, використовуючи цей перетягуваний замість ідентифікатора ресурсу.
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 (), але в документації зазначено, що "читання та декодування Bitmap в потоці інтерфейсу користувача може спричинити затримку затримки ... розглянути можливість використання setImageDravable () або setImageBitmap ()." як стверджує четто
Усі опубліковані відповіді сьогодні не застосовуються. Наприклад, застаріле значення getDravable () застаріле. Ось оновлена відповідь, ура!
ContextCompat.getDrawable(mContext, drawable)
З документально підтвердженого методу
загальнодоступний статичний кінцевий android.graphics.dravable.Drawable getDravable (контекст @NotNull android.content.Context,
@ android.support.annotation.DravableRes int id
Ви можете спробувати використовувати цей код:
ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
Якщо ви не можете отримати подібний об’єкт Resources у класі, який не є діяльністю, вам слід додати метод 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(ActivityCompat.getDrawable(getContext(),
R.drawable.generatedID));
або за допомогою Пікассо:
Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);
Створіть клас POJO.java та створіть "конструктор, методи getter та setter"
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
знову