نمایش یک Progress Dialog
سم الله الرحمن الرحیم
نمایش یک Progress Dialog
فصل دوم- بخش پنجم
یک از UI های رایج در دستگا های که از سیستم عامل اندروی استفاد ه می کنند دیالوگ Please Wait می باشد. که شما عموما آن را زمانی مشاهده می کنیدکه یک کار برای مدت زمان طولانی در حال انجام باشد.
به عنوان مثال زمان های که شما در حال Loginکردن به یک سرور می باشید یا در حال انجام محاسبات سنگین برای نمایش به کاربر می باشیدویاموارد از این قبیل این Dialog بسیار مفید می باشد.که به عنوان Progress Dialog شناخته می شود
آن را با یک مثال به شما نمایش می دهیم.
دستورات زیر را در فایل main.xml قرار دهید.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn_dialog"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Click to display a dialog"
android:onClick="onClick" />
<Button
android:id="@+id/btn_dialog2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Click to display a progress dialog"
android:onClick="onClick2" />
</LinearLayout>
ودر فایل جاوا دستوراتی که به صورت زیر تغییر دهید.
F11 رابزنید تا برنامه اجرا شود.
package com.Mehrdad.activity101;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Toast;
public class MainActivity extends Activity {
String tag = "LifeCycle";
CharSequence[] items = { "Google", "Apple", "Microsoft" };
boolean[] itemsChecked = new boolean[items.length];
/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
}
public void onClick(View v) {
showDialog(0);
}
public void onClick2(View v) {
final ProgressDialog pdialog = ProgressDialog.show(this,
"Title Ra inja Vared Mikonid", "pigham ra inja vared mikonid",
true);
new Thread(new Runnable() {
@Override
public void run() {
/** TODO Auto-generated method stub*/
try {
Thread.sleep(5000);
pdialog.dismiss();
} catch (InterruptedException e) {
/** TODO Auto-generated catch block*/
e.printStackTrace();
}
}
}).start();
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case 0:
return new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_delete)
.setTitle("En ghesamt Title Ra Vared Mikonid")
.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1) {
Toast.makeText(getBaseContext(),
"Ok Ra Click Kardid",
Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1) {
Toast.makeText(getBaseContext(),
"Cancel Ra Click Kardid",
Toast.LENGTH_SHORT).show();
}
})
.setMultiChoiceItems(items, itemsChecked,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1, boolean arg2) {
Toast.makeText(
getBaseContext(),
items[arg1] + " Ra Entekhab Kardid",
Toast.LENGTH_SHORT).show();
}
}).create();
}
return null;
}
}
توضیحات
شما به سادگی یک ProgressDialog ایجادکرده اید, شما یک نمونه از کلاس ProgressDialogایجاد و متدshowرافراخوانی کردهاید
final ProgressDialog pdialog= ProgressDialog.show(this,
"Title Ra inja Vared Mikonid",
"pigham ra inja vared mikonid",true);
این قطعه کدProgressDialogکه مشاهده کردیدرا تولیدمی کند.از آنجاکه این یک مدل از Dialog می باشدتازمانی که آن نابود شوددرصفحه باقی می ماند. برای اجرای یک کارطولانی درBackGround شما یک Thread را با استفاده از بلاکRunning ایجاد کرده اید(که درفصلهای 11 به آن اشاره می کنیم.)
کدمورد نظررارادرمتدRun قرارداده تا در یک thread جداگانه اجرا شوند.
وکد مود نظر ما در این مورددستوراتی است که برای مدت 5 ثانیه در حالت Sleep قرار گیردوبعد از آنDialog راازبین بردیم
new Thread(new Runnable() {
@Override
public void run() {
/** TODO Auto-generated method stub*/
try {
Thread.sleep(5000);
pdialog.dismiss();
} catch (InterruptedException e) {
/** TODO Auto-generated catch block*/
e.printStackTrace();
}
}
}).start();
نمایش جزئیات بیشتر درProgressDialog
دستورات زیررا Main.xmlوارد کنید.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn_dialog"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="Click to display a dialog" />
<Button
android:id="@+id/btn_dialog2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="onClick2"
android:text="Click to display a progress dialog" />
<Button
android:id="@+id/btn_dialog3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/btn_dialog2"
android:layout_below="@+id/btn_dialog2"
android:layout_marginTop="28dp"
android:onClick="onClick3"
android:text="Click to display a detailed progress dialog" />
</LinearLayout>
دستورات زیر را در فایل جاوا قرار دهید .
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Toast;
public class MainActivity extends Activity {
String tag = "LifeCycle";
CharSequence[] items = { "Google", "Apple", "Microsoft" };
boolean[] itemsChecked = new boolean[items.length];
ProgressDialog progressDialog;
/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
}
public void onClick(View v) {
showDialog(0);
}
public void onClick2(View v) {
final ProgressDialog pdialog = ProgressDialog.show(this,
"Title Ra inja Vared Mikonid", "pigham ra inja vared mikonid",
true);
new Thread(new Runnable() {
@Override
public void run() {
/** TODO Auto-generated method stub*/
try {
Thread.sleep(5000);
pdialog.dismiss();
} catch (InterruptedException e) {
/** TODO Auto-generated catch block*/
e.printStackTrace();
}
}
}).start();
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case 0:
return new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_delete)
.setTitle("En ghesamt Title Ra Vared Mikonid")
.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1) {
Toast.makeText(getBaseContext(),
"Ok Ra Click Kardid",
Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1) {
Toast.makeText(getBaseContext(),
"Cancel Ra Click Kardid",
Toast.LENGTH_SHORT).show();
}
})
.setMultiChoiceItems(items, itemsChecked,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1, boolean arg2) {
Toast.makeText(
getBaseContext(),
items[arg1] + " Ra Entekhab Kardid",
Toast.LENGTH_SHORT).show();
}
}).create();
case 1:
progressDialog = new ProgressDialog(this);
progressDialog.setIcon(R.drawable.ic_launcher);
progressDialog.setTitle("Downloading files...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
Toast.makeText(getBaseContext(), "OK clicked!",
Toast.LENGTH_SHORT).show();
}
});
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
Toast.makeText(getBaseContext(), "Cancel clicked!",
Toast.LENGTH_SHORT).show();
}
});
return progressDialog;
}
return null;
}
public void onClick3(View v) {
showDialog(1);
progressDialog.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---*/
progressDialog.incrementProgressBy((int) (100 / 15));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
progressDialog.dismiss();
}
}).start();
}
}
F11 رافشار هیدتابرنامه اجرا شود
توضیحات
شمایک Dialog ایجاد کرید که جریان Progress یک عملیات را نمایش می دهید.
شما ابتدا یک نمونه از ProgressDialog ایجا کردیداز قبیل Icon,titlt,style
progressDialog = new ProgressDialog(this);
progressDialog.setIcon(R.drawable.ic_launcher);
progressDialog.setTitle("Downloading files...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
شما سپس 2دکمه که می خواستیددرProgress dialog نمایش داده شودراتنظیم کردید.
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
Toast.makeText(getBaseContext(), "OK clicked!",
Toast.LENGTH_SHORT).show();
}
});
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
Toast.makeText(getBaseContext(), "Cancel clicked!",
Toast.LENGTH_SHORT).show();
}
});
return progressDialog;
برای نمایش ProgressدرProgressDialog شمامیتوانید ازشی Thread برای اجرای بلاکRunnable استفاده کنید
progressDialog.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---*/
progressDialog.incrementProgressBy((int) (100 / 15));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
progressDialog.dismiss();
}
}).start();
دراین مورد از یک تا 100می شماردور بین هر شمارش 1 ثانیه تاخیر میباشد. متد incrementProgressBy()
شمارنده counter راافزایش میده. وزمانی که به100%رسید dialog از بین می رود