آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

Ali  11 سال پیش  11 سال پیش
0 0

سلام دوستان

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

ممنون

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

اصلاح شد:

 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);

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

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

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