بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

آپدیت نشدن ViewPager بعد از دانلود عکس

مدیریت گفتگو
Ali 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام دوستان

من یه ViewPager دارم و توی اون عکس‌هایی که از اینترنت میگیرم رو قرار میدم اما مثل لیست ویو باید یه بار notifyDataSetChanged بشه تا عکس‌ها رو نشون بده؛ استاد درباره لیست ویو راه حل رو توی پروژه مارکت ارائه دادند اما میخواستم بدونم با ViewPager باید چکار بکنیم؟

ممنون

نظرات

Ali 11 سال پیش
up
کاشی زاده 11 سال پیش
اگر داخل ویو پیجر لیست ویو دارید که هیچی همون ناتیفای میزنید ، ولی اگر داخلش فقط یک عکس دارید باید براش کد بنویسید و لیسنر دانلودر رو بهش وصل کنید تا بعد از دانلود خودش رو آپدیت کنه
Ali 11 سال پیش
داخل ویو پیجر فقط عکس دارم و تا حالا هم میخواستم همین کار را انجام بدم و خیلی کدها را هم داخل لیسنر امتحان کردم ولی جواب نداده. ممنون میشم اگر بیشتر راهنمایی کنید.
کاشی زاده 11 سال پیش
ببنید شما باید یک imageloader بنویسید ، یک imageview سفارشی که میتونه url بگیره و دانلودر رو صدا کنه بعد از دانلود هم عکس رو نشون بده نوشتنش کار سختی نیست فقط باید کمی دقت کنید که باگ پیدا نکنه .

پاسخ‌ها 1

Ali 11 سال پیش

اصلاح شد:

 public class CustomImageLoader extends ImageView{

public static Bitmap bitmap;
public static OnDownloadCompleteListener downloadCompleteListener;
public static ArrayList<String> urls = new ArrayList<String>();

public CustomImageLoader(Context context) {
super(context);
initializeListener();
}

public CustomImageLoader(Context context, AttributeSet attrs) {
super(context, attrs);
initializeListener();
}

public CustomImageLoader(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initializeListener();
}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public CustomImageLoader(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
initializeListener();
}

public void setUrlForDownload(String url){
addToDownloadList(url);
}

public static void addToDownloadList(String url) {
if (url == null) {
return;
}
String filename = HelperString.getFileName(url);

if (urls.contains(url)) {
return;
}

if (new File(G.DIR_FINAL + "/" + filename).exists()) {
return;
}

urls.add(url);

DownloadRequest downloadRequest = new DownloadRequest()
.downloadPath(url)
.filepath(G.DIR_TEMP + "/" + filename)
.listener(downloadCompleteListener)
.download();
}

public static void initializeListener() {
downloadCompleteListener = new OnDownloadCompleteListener() {

@Override
public void onDownloadComplete(String url, String localPath) {
String newPath = localPath.replace("/temp/", "/final/");
copyFile(localPath, newPath); \\برای اینکه زیاد شلوغ نشه تابع کپی رو ننوشتم
new File(localPath).delete();
BitmapFactory.Options options = new BitmapFactory.Options();
bitmap = BitmapFactory.decodeFile(newPath, options);
setImageBitmap(bitmap);
}
};
}
}

توی ادپتر ویو پیجر در متد instantiateItem هم خط‌های زیر اجرا میشه.

View view = G.inflater.inflate(R.layout.sample, null);
CustomImageLoader imageLoader = (CustomImageLoader) view.findViewById(R.id.imageLoader);
url = imageUrls.get(position) \\عکسها url
imageLoader.setUrlForDownload(url);

ممنون از محمد حسین با راهنمایی خوبش :)

نظرات

کاشی زاده 11 سال پیش
ببنید شما لیسنر دارید و زمانی که دانلود تموم میشه لیسنر شما صداش میکنه اونجا میاید و آدرس عکس که روی sd ذخیره شده رو میگیرید و setImage میکنید .
Ali 11 سال پیش
ببخشید بعد از ظهریه مچ دستم خیلی درد میکرد و کلافه بودم، درست نفهمیدم دارم چکار میکنم. ممنون به کمک شما حل شد. کدهای بالا اصلاح شد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .