Я динамически генерирую строку из базы данных, которая имеет то же имя изображения в 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 в потоке пользовательского интерфейса, что может вызвать сбой задержки ... рассмотрите возможность использования setImageDrawable () или setImageBitmap ()». как заявлено Четто
Все опубликованные ответы сегодня не применимы. Например, getDrawable () устарела. Вот обновленный ответ, ура!
ContextCompat.getDrawable(mContext, drawable)
Из документированного метода
общедоступный статический финал 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, вам необходимо добавить метод 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 и создайте «методы конструктора, получения и установки»
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
снова