آموزش شی گرایی
آموزش شی گرایی – قسمت هشتم
2016-05-26
آموزش برنامه نویسی اندروید
اینتنت ها در اندروید و جابجایی بین اکتیویتی ها با اینتنت
2016-05-30

ProgressDialog ها – آموزش ProgressDialog در اندروید ، در قسمت دوازدهم آموزش برنامه نویسی اندروید در ارتباط با کار با 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 در اندروید

اصولا برای ایجاد یک ProgressDialog پس از import کردن این کلاس باید یک شی از این کلاس ایجاد کرده و متد show() مربوط به آن که مشخص است برای نمایش دادن تنظیم ویژگی های آن است را فراخوانی کنیم که در دستوارت نیز با کامنت //show the Dialog مشخص شده. این کار تنها برای نمایش دیالوگ است و گر ادامه کدها را ننویسیم و پس از پایان ایجاد شی و متد show() برنامه را اجرا کنیم خواهیم دید که برنامه به درستی اجرا میشود اما پنجره ProgressDialog ایجاد شده مدام در حال اجرا میباشد و نقطه پایان ندارد چون تعیین نشده پس برای جلوگیری از این رویداد از یک Thread به وسیله رویداد Runnable ایجاد میکنیم (در ادامه مفصل تر راجع به Thread ها صحبت خواهیم کرد) و توسط متد Run که در Thread دیگری اجرا میشود با استفاده از متد sleep مشخص میکنیم که پس از ۵ ثانیه پنجره Progress Dialog بسته شود (با استفاده از متد dimiss()) پس از اجرا نتیجه مشابه زیر را خواهید داشت

ProgressDialog ها - آموزش ProgressDialog در اندروید
ProgressDialog ها – آموزش ProgressDialog در اندروید

نمایش یک ProgressDialog پیچیده تر

در مبحث 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;
		}

پس از اجرا نتیجه را بدین صورت خواهیم دید

ProgressDialog ها - آموزش ProgressDialog در اندروید
ProgressDialog ها – آموزش ProgressDialog در اندروید

روش کار برای ایجاد یک ProgressDialog پیچیده تر

برای ایجاد یک دیالوگ 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 شمارنده را افزایش میدهد و هرگاه مقدار ۱۰۰% شد پنجره بسته میشود.

سرفصل های آموزش برنامه نویسی اندروید:

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *