ProgressDialog ها – آموزش ProgressDialog در اندروید ، در قسمت دوازدهم آموزش برنامه نویسی اندروید در ارتباط با کار با ProgressDialog ها که کاربرد فراوانی در برنامه های اندروید دارد و اساسا زمانی استفاده میشوند که کاربر باید منتظر بماند و دسترسی محدودی داشته باشد تا زمانی که پروسه مورد نظر به پایان برسد صحبت کرده ایم و دو مثال کاربردی را نیز آموزش داده ایم.
توجه : برای مشاهده تصاویر در سایز اصلی بر روی آنها کلیک کنید.
یکی از دیالوگ های پر مصرف اندروید دیالوگ Please Wait است که معمولا زمانی که یک پروسه در حال انجام است نمایش داده میشود. برای مثال برنامه ای که قبل از استفاده کاربر باید به سرور وصل شده Login شود خب مسلما پروسه عظیمی را باید طی کند پس از دیالوگ ProgressDialog استفاده میکند تا کاربر را منتظر نگه دارد.
برای درک بیشتر پروژه جدیدی تحت عنوان ProgressDialogPrj ایجاد کرده و دستورات زیر را درون بخش activity_main.xml بدین صورت کدنویسی میکنیم
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="111dp"
android:text="Click to Display a Progress Dialog"
android:onClick="onClick"/>
کدهای فوق یک Button را ایجاد میکنند که میتوان به صورت گرافیکی نیز (در آموزش های قبل آموزش داده شده) ایجاد کرد. حال در بخش MainActivity.java که در مسیر ProgressDialogPrj /src /com.example.progressdialogprj قرار دارد بدین صورت کدنویسی میکنیم
package com.example.progressdialogprj;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.app.Activity;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View v)
{
//--show the Dialog--
final ProgressDialog dialog = ProgressDialog.show(this, "Progress Dialog", "Please Wait...");
new Thread(new Runnable(){
public void run(){
try{
//--simulate dialog something lengthy--
Thread .sleep(5000);
dialog.dismiss();
}catch (InterruptedException e){
e.printStackTrace();
}
}
}).start();
}
}
اصولا برای ایجاد یک ProgressDialog پس از import کردن این کلاس باید یک شی از این کلاس ایجاد کرده و متد show() مربوط به آن که مشخص است برای نمایش دادن تنظیم ویژگی های آن است را فراخوانی کنیم که در دستوارت نیز با کامنت //show the Dialog مشخص شده. این کار تنها برای نمایش دیالوگ است و گر ادامه کدها را ننویسیم و پس از پایان ایجاد شی و متد show() برنامه را اجرا کنیم خواهیم دید که برنامه به درستی اجرا میشود اما پنجره ProgressDialog ایجاد شده مدام در حال اجرا میباشد و نقطه پایان ندارد چون تعیین نشده پس برای جلوگیری از این رویداد از یک Thread به وسیله رویداد Runnable ایجاد میکنیم (در ادامه مفصل تر راجع به Thread ها صحبت خواهیم کرد) و توسط متد Run که در Thread دیگری اجرا میشود با استفاده از متد sleep مشخص میکنیم که پس از ۵ ثانیه پنجره Progress Dialog بسته شود (با استفاده از متد dimiss()) پس از اجرا نتیجه مشابه زیر را خواهید داشت
در مبحث ProgressDialog ها نوع دیگری از این دیالوگ وجود دارد که با درصدها کار میکند بدین صورت که تا ۱۰۰در صد پیش میرود و وقتی به صددرصد رسید پنجره بسته یا پروسه اتمام میابد برای درک بیشتر مثالی در این خصوص میزنیم.
در همان پروژه ProgressDialogPrj که برای مثال قل ایجاد کردید در قسمت activity_main.xml یک Button دیگر به صورت زیر ایجاد میکنیم
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/button1"
android:layout_marginLeft="37dp"
android:layout_marginTop="46dp"
android:text="Click to Display a detailed Progress Dialog"
android:onClick="onClick2" />
توجه داشته باشید که بخش “android:onClick=”onClick2 باید مقدار متفاوت با Button قبل داشته باشد چون در اکتیویتی صدا زده میشوند که هنگام کلیک کردن اقدامی انجام دهد.
حال در قسمت MainActivity.java کدهای زیر را اضافه میکنیم
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import android.app.Activity;
import android.app.Dialog;
ProgressDialog p;
public void onClick2(View v)
{
showDialog(0);
p.setProgress(0);
new Thread(new Runnable(){
public void run(){
for(int i=1;i<=15;i++)
{
try{
//--simulate doing something lengthy--
Thread.sleep(1000);
//--update the dialog--
p.incrementProgressBy((int)100/15);
}catch (InterruptedException e){
e.printStackTrace();
}
}
p.dismiss();
}
}).start();
}
@Override
protected Dialog onCreateDialog(int id)
{
switch (id){
case 0:
p= new ProgressDialog(this);
p.setIcon(R.drawable.ic_launcher);
p.setTitle("Downloading Files...");
p.setProgressStyle(p.STYLE_HORIZONTAL);
p.setButton(DialogInterface.BUTTON_POSITIVE, "Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog , int wichButton) {
// TODO Auto-generated method stub
Toast.makeText(getBaseContext(), "Ok Clicked", Toast.LENGTH_SHORT).show();;
}
});
p.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int wichbutton) {
// TODO Auto-generated method stub
Toast.makeText(getBaseContext(), "Cancle Clicked", Toast.LENGTH_SHORT).show();
}
});
return p;
}
return null;
}
پس از اجرا نتیجه را بدین صورت خواهیم دید
برای ایجاد یک دیالوگ Progress برای نمایش یک عملیات ابتدا باید یک شی از کلاس ProgressDialog ایجاد کرد و خصوصیاتی چون آیکون و استایل آن را تنظیم کرد
p= new ProgressDialog(this);
p.setIcon(R.drawable.ic_launcher);
p.setTitle("Downloading Files...");
p.setProgressStyle(p.STYLE_HORIZONTAL);
سپس دو دکمه که برروی دیالوگ نمایش داده شود که با ویژگی های BUTTON_POSETIVE و BUTTON_NEGATIVE مشخص میشوند را تعیین میکنیم سپس باید برای تعیین مقدار پیشرفت از شی Thread برای ایجاد یک بلاک Runnable استففاده میکنیم
در تکه کد زیر نیز هدف شمارش ۱ تا ۱۵ با تاخیر ۱ثانیه در شمارش هر عدد میباشد.
p.setProgress(0);
new Thread(new Runnable(){
public void run(){
for(int i=1;i<=15;i++)
{
try{
//--simulate doing something lengthy--
Thread.sleep(1000);
//--update the dialog--
p.incrementProgressBy((int)100/15);
}catch (InterruptedException e){
e.printStackTrace();
}
}
p.dismiss();
}
}).start();
متد ()incrementProgressBy شمارنده را افزایش میدهد و هرگاه مقدار ۱۰۰% شد پنجره بسته میشود.