نمایش یک 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 رافشار هیدتابرنامه اجرا شود 

نمایش یک progress Dialog در اندروید

توضیحات

شمایک 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 از بین می رود            

نظرات (۰)

هيچ نظري هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی