تغییر عکس در لیست ویو که به دیتابیس آفلاین متصله
سلام دوستان سوالم اینه که من چطور وقتی دیتابیس رو به لیست ویو متصل میکنم. عکسامم رو که تو لیست ویو هست و داخل پروژه ایمپورت شده تغییر بدم. عکس داخل دیتابیس نیست./ این کد قسمت تغییر عکس رو میخوام. چون نمیتونم آدرس عکس رو یک متغیر بذارم. مسیر imagesource رو میگم. اطلاعات متنی رو از دیتابیس بگیره در همین زمان که فور یا وایل داره کار میکنه متغیرم با تغییرش که نام عکس رو هم تغییر میده عکسم عوض شه.
تشکر ..
سلام از تابع زیر استفاده کنید .
اول Context رو توی کلاس G تعریف کنید :
public class G extends Application {
public static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
}
عکس رو توی پوشه های drawable بذارید و به جای salah متغیر رو قرار بدید.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView img = (ImageView) findViewById(R.id.img);
SetDrawable("salah", img);
}
public static void SetDrawable(String value, ImageView image) {
int resID = G.context.getResources().getIdentifier(value, "drawable", G.context.getPackageName());
image.setImageResource(resID);
}
for (int i = 0; i < 10; i++) {
StructNote note = new StructNote();
note.title = "Title " + i;
note.description = "Description " + i;
note.done = false;
ImageView imgDelete = (ImageView) findViewById(R.id.imgDelete);
SetDrawable("sample".i.".png", imgDelete);
public static void SetDrawable(String value, ImageView image) {
int resID = G.context.getResources().getIdentifier(value, "drawable", G.context.getPackageName());
image.setImageResource(resID);
}
G.notes.add(note);
}
این پروژه لیست ویو استاد
اگه مشکلتون هنوز حل نشده :
ظاهرا شما با کلاس های استاد لیست ویوتون رو ساختین منم با توجه به همون بهتون توضی میدم
اول توی کلاس استراکتت یه دونه دراوابل بساز
دوم توی کلاس ادپترت ایمیج ویوت رو تعریف کن و با دراوابلت ست بک راند دراوابل کن
سوم وقتی داری لیست ویو رو مقدار دهی میکنی دراوایبلت رو از پوشه است بساز
struct note :
public drawable d
adapter note :
private static class ViewHolder { public ImageView imageview; public ViewHolder(View view) {
imageView = (ImageView) view.findViewbyid(your id ): } public void fill(final ArrayAdapter<NStructNote> adapter, final NStructNote item, final int position) {
imageView.setbackrownddrawable(item.d); } }
main class :
....
Drawable d = Drawable.createFromStream(getAssets().open("yourdrawable.png"), null);
note.d = d;
....
سلام جناب تشکر میکنم. کد رو اجرا کردم و کاملا کار کرد. حالا من موندم چطور مقدار عکس رو تغییر بدم با فور ..
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lstContent = (ListView) findViewById(R.id.lstContent);
adapter = new AdapterNote(G.notes);
lstContent.setAdapter(adapter);
ImageView imglist;
for (int i = 1; i <= 5; i++) {
StructNote note = new StructNote();
note.title = "Title " + i;
note.description = "Description " + i;
note.done = false;
try {
note.ali = note.ali.createFromStream(getAssets().open("shahid" + i + ".png"), null);
}
catch (IOException e) {
e.printStackTrace();
}
Log.i("LOG", "Try : " + i);
G.notes.add(note);
}
adapter.notifyDataSetChanged();
}
note.ali = note.ali.createFromStream(getAssets().open("sample" + i + ".png"), null);
نمیدونم این چرا کار نمیکنه و همه رو یه عکس اولی نشون میده شاید باید یکری بشه و من نمیدونم
یه راهنمایی کنین. تشکر ...
دوستان با عرض پوزش بابت کامت اولی که زیر پست گذاشتم . من متوجه نبودم عذر میخوام. متغیر کار میکنه ولی تغییر نمیکنه.
tray: i کار میکنه. ولی متاسفانه عکس تغییر نمیکنه .
من مقدار 5 به فور دادم اما دوبار من لیست پنج تایی میبینم. یعنی یبار از یک تا 5 خروجی میده دوبار هباز همین کارو تکرار میکنه.
این قسمت از کد گیر داره..
String count = String.valueOf(i);
String imgname = "shahid" + count + ".png";
note.ali = note.ali.createFromStream(getAssets().open(imgname), null);
این کد همون مثال استاد در لیست ویو هست
@Override
publicvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lstContent =(ListView) findViewById(R.id.lstContent);
adapter =newAdapterNote(G.notes);
lstContent.setAdapter(adapter);
ImageView imglist;
for(int i =1; i <=5; i++){
StructNote note =newStructNote();
note.title ="Title "+ i;
note.description ="Description "+ i;
note.done=false;
try{
note.ali = note.ali.createFromStream(getAssets().open("shahid"+ i +".png"),null);
// این قسمت از کد به خوبی کار نمیکنه
}
catch(IOException e){
e.printStackTrace();
}
Log.i("LOG","Try : "+ i);
G.notes.add(note);
}
adapter.notifyDataSetChanged();
}
جایی که باید مقدار آی تغییر کنهو در نتیجه نام عکس تغییر پیدا کنه و عکس ها در لیست ویو عوض بشن در هر آیتم لیست.
اینم شات
اگه مشکل لود تصویر داری من کد اماده دارم اینو امتحان کن (فایل را که در sd ذخیره شده باشه لود میکنه)
img_basket.setImageBitmap(null);
img_basket.setBackground(null);
if (item.getpic().equals("no_image")
| item.getpic().equals("null")
| item.getpic() == null) {
final int version = Build.VERSION.SDK_INT;
if (version >= 16) {
img_basket.setBackground(G.context.getResources()
.getDrawable(R.drawable.ic_not_available));
} else {
img_basket.setBackgroundDrawable(G.context.getResources()
.getDrawable(R.drawable.ic_not_available));
}
} else {
Bitmap bmp = BitmapFactory.decodeFile(item.getpic());
img_basket.setImageBitmap(bmp);
}
تابع getpic مسیر عکس را روی کارت حافظه نگه میداره
به نظر من فایل عکست را به صورت base64 از اینترنت بگیر توی اندروید تبدیل به عکس بکن و توی حافظه ذخیره کن و با این کد لود کن تصویر
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .