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

استفاده از Dialog برای نمایش Progress

Reza AF  12 سال پیش  12 سال پیش
0 0

سلام استاد
من میخاستم بدونم چطوری میشه میزان دانلود رو بجای اینکه توی یک صفحه مجزا نمایش داد، توی یک ProgressDialog نمایش بدیم؟

 

private void testprogresdialog(final int per) {

final ProgressDialog mydialog = new ProgressDialog(DownloaderActivity.this);
mydialog.setTitle("Loading...");
mydialog.setMessage("donloading Server... ");
mydialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

mydialog.setOnShowListener(new OnShowListener() {

@Override
public void onShow(DialogInterface arg0) {
mydialog.setProgress(50);
}
});

mydialog.show();
}


توی این کد یه مشکلی هست، اونم اینکه وقتی بخام پروگرس دیالوگ رو بصورت دستی مقدار دهی کنم، مثلا 50 بدم کار میکنه و 50 درصدش پر میشه، اما وقتی همین رو توی یک حلقه میزارم که از 1 تا 100 خودش کامل بشه، جواب نمیده، کرش نمیکنه ها، ولی اینقدر گیر میکنه که آخرش فورس کلوز میده.

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
uncocoder  12 سال پیش
0 0

کلاً اعمالی که در Thread اصلی ( Main Thread یا UI Thread ) بصورت مداوم انجام بشه و باعث بشه که این Thread نتونه به بقیه وظایفش عمل کنه، خودش رو به شکل Force Close ممکنه نشون بده ( بعد از مدتی ) ، به این حالت قفل شدن صفحه می گن Halt و سرانجام همه Halt ها Crash هست ( که همون پیغام Force Close هست ).

تغییر دادن مقدار Progress در داخل یک حلقه و در UI Thread درست نیست و باید از یک Thread دیگر و Sleep داخل حلقه مثل مثال Counter استفاده کنید که مثلاً هر n میلی ثانیه یک کاری رو انجام بده. از طرفی با توجه به توانایی دریافت View داخل یک Dialog با استفاده از dialog.findViewById میشه، اشاره گر مربوط به ProgressBar رو بدست آورد و از خارج این دیالوگ و توسط یک Listener ( مثل مثال های عرضه شده ) مقدار دهی کرد.

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