Saya membuat string dari database secara dinamis yang memiliki nama gambar yang sama di drawable
folder.
Sekarang saya ingin menetapkan nilai itu untuk ImageView
digunakan setImageDrawable(R.id.StringGenerated)
secara dinamis.
Ada Saran ..
Saya membuat string dari database secara dinamis yang memiliki nama gambar yang sama di drawable
folder.
Sekarang saya ingin menetapkan nilai itu untuk ImageView
digunakan setImageDrawable(R.id.StringGenerated)
secara dinamis.
Ada Saran ..
Jawaban:
Coba ini,
int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);
Ini akan mengembalikan id drawable yang ingin Anda akses ... lalu Anda dapat menyetel gambar di imageview dengan melakukan hal berikut
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);
atau
setImageDrawable(getResources().getDrawable(R.drawable.icon));
Saya pribadi lebih suka menggunakan cara setImageResource()
seperti ini.
ImageView myImageView = (ImageView)findViewById(R.id.myImage);
myImageView.setImageResource(R.drawable.icon);
Nama resource drawable tidak disimpan sebagai string, jadi Anda harus menyelesaikan string tersebut menjadi konstanta integer yang dihasilkan selama pembuatan. Anda dapat menggunakan Resources
kelas untuk menyelesaikan string menjadi integer itu.
Resources res = getResources();
int resourceId = res.getIdentifier(
generatedString, "drawable", getPackageName() );
imageView.setImageResource( resourceId );
Ini menyelesaikan string yang Anda buat menjadi bilangan bulat yang ImageView
dapat digunakan untuk memuat gambar yang benar.
Alternatifnya, Anda bisa menggunakan id untuk memuat Drawable
secara manual, lalu menyetel gambar menggunakan drawable tersebut, bukan ID resource.
Drawable drawable = res.getDrawable( resourceId );
imageView.setImageDrawable( drawable );
Sesederhana jawaban ini:
Drawable myDrawable = getResources().getDrawable(R.drawable.pic);
imageview.setImageDrawable(myDrawable);
Ini berfungsi, setidaknya di 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);
Anda bisa menggunakan setImageResource (), tetapi dokumentasinya menetapkan bahwa "melakukan pembacaan dan dekode Bitmap pada thread UI, yang bisa menyebabkan cegukan latensi ... pertimbangkan untuk menggunakan setImageDrawable () atau setImageBitmap ()." seperti yang dinyatakan oleh chetto
Semua jawaban yang diposting tidak berlaku hari ini. Misalnya, getDrawable () tidak digunakan lagi. Ini jawaban terbaru, hai!
ContextCompat.getDrawable(mContext, drawable)
Dari metode terdokumentasi
public static final android.graphics.drawable.Drawable getDrawable (@NotNull android.content.Context konteks,
@ android.support.annotation.DrawableRes int id
Anda dapat mencoba menggunakan kode ini:
ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
Jika Anda tidak bisa mendapatkan objek Resources seperti ini di kelas yang bukan Activity, Anda harus menambahkan metode getContext () untuk getResources () misalnya
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));
Anda juga dapat menggunakan sesuatu seperti:
imageView.setImageDrawable(ActivityCompat.getDrawable(getContext(),
R.drawable.generatedID));
atau menggunakan Picasso:
Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);
Buat kelas POJO.java dan buat "metode konstruktor, pengambil & penyetel"
class POJO{
public POJO(Drawable proImagePath) {
setProductImagePath(proImagePath);
}
public Drawable getProductImagePath() {
return productImagePath;
}
public void setProductImagePath(Drawable productImagePath) {
this.productImagePath = productImagePath;
}
}
Kemudian siapkan adaptor melalui sumber daya gambar yang dapat digambar ke 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());
}
}
Kemudian teruskan referensi melalui 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));
}
}
bagian dari proyek saya, semuanya bekerja! )
@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());
File 'R' tidak dapat dibuat pada saat aplikasi dijalankan. Anda dapat menggunakan beberapa alternatif lain seperti menggunakan if-else
atauswitch-case
R
lagi