بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

اجرای progressDialog در حین intent بین 2 Activity

مدیریت گفتگو
sadeghbarout 12 سال پیش
آخرین تغییر: 12 سال پیش

سلام

من دوتا اکتیویتی دارم .فرض کنید اکتیویتی 1  من یه دکمه داره که وقتی زده میشه یه عملیات سنگین انجام میشه و به اکتیویتی 2 من میره و اونجا بقیه عملیات سنگین رو انجام میده.

حالا من میخوام وقتی کاربر دکمه رو میزنه یه progressDialog نشون بده و در پس زمینه اون عملیات های سنگین توی اکتیویتی اول انجام بشه و بره اکتیویتی دوم و اونجا هم عملیات ها رو انجام بده و در آخر progressDialog رو ببنده.

من خودم اینو با thread ها نوشتم ولی وقتی به اکتیویتی دوم میره اون progressDialog هم بسته میشه. اما من میخوام اون progressDialog باز بمونه و در انتهای عملیات های صفحه دوم بسته بشه

شما راهی سراغ ندارید؟

برای راحتی کار یه کد نمونه ای هم میذارم :

اکتیویتی اول :

 public class Test_thread_progressDialogActivity extends Activity {

    public static ProgressDialog dialog1;
    public static Handler        handler;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        handler = new Handler();

        Button btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                Thread thread = new Thread(new Runnable() {

                    @Override
                    public void run() {
                        handler.post(new Runnable() {

                            @Override
                            public void run() {
                                dialog1 = new ProgressDialog(Test_thread_progressDialogActivity.this);

                                dialog1.setTitle("PROGRESSING1");
                                dialog1.setMessage("Pleas wait until finished!");
                                dialog1.setCancelable(false); 
                                dialog1.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                                dialog1.setCancelable(false);

                                dialog1.show();

                            }
                        });
                    }
                });
                thread.start();

                Thread thread2 = new Thread(new Runnable() {

                    @Override
                    public void run() {

                        for (int i = 0; i < 10000; i++) {
                            Log.i("Dd", "ds" + i);
                        }
                        Intent intent = new Intent(Test_thread_progressDialogActivity.this, Test_thread_progressDialogActivity2.class);
                        Test_thread_progressDialogActivity.this.startActivity(intent);
                    }
                });
                thread2.start();        

            }
        });

    }
}

اینم اکتیویتی دوم:

 public class Test_thread_progressDialogActivity2 extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.form2);
        handler = new Handler();

        Thread thread2 = new Thread(new Runnable() {

            @Override
            public void run() {

                for (int i = 0; i < 10000; i++) {
                    Log.i("Dd", "ds" + i);
                }
            }
        });
        thread2.start();
       
    }
}

نظرات

مجتبی یگانه 12 سال پیش
یه متغییر تعریف کن ، is thread working - تا زمانی که ترد کار میکنه مقدارش درست باشه ، چون استاتیک تعریف میکنیم ، میگیم ActivityMain.isthreadworking پس از هر جایی میشه بهش دسترسی داشت ، از طرفی تا زمانی که شرط برقراره ، دیالوگ رو نشون بده :)
sadeghbarout 12 سال پیش
اینو که خودمم میدونم که کی باید بسته بشه. مشکل من اینه که وقتی اکتیویتی بعدی اجرا میشه ، progressDialog خود به خود بسته میشه! من میخوام خودبخود بسته نشه یا یه جوری ظاهرش کنیم که مستقل از اکتیویتی باشه!
OmidAhmadian 12 سال پیش
من یه راهی به ذهنم می رسه ولی حال ندارم توضیح بدم خیلی طولانیه فردا تو راهه دانشگاه یادم بنداز برات توضیح بدم.
sadeghbarout 12 سال پیش
دوستان من همچنان جوابی نگرفته ام و منتظر یه راه حلم! ممنون
مجتبی یگانه 12 سال پیش
فردا تو راه دانشگاه یادم بنداز بگم ! ، از همون اول دیالوگ رو نشون بده (کاستوم دیالوگ ) اگه ترد متوقف شد ، دیالوگ رو مخفی کن یا برو به یه اکتیویتی دیگه !
sadeghbarout 12 سال پیش
مجتبی جان انگار هنوز نگرفتی سوالم چیه! بیخیال ;)

پاسخ‌ها 1

uncocoder 12 سال پیش

شما نمی تونید وقتی دیالوگ باز هست، Activity اول رو ببنید و به Activity دوم برید و دیالوگ هم همچنان باز بمونه.

لزومی هم نداره چه از نظر زیبایی و چه از نظر User Experience این اتفاق بیافته.

 

راه حل اول:

یا پردازش دوم رو هم در همون Activity اول انجام بدید و بعد به Activity دوم برید.

 

راه حل سوم:

دیالوگ باز شد توسط Activity اول رو ببنید، Activity دوم رو باز کنید و بعد یک Dialog جدید باز کنید.

 

راه حل سوم:

محتوای Activity اول رو با استفاده از Gone کردن لایه و VISIBLE کردن لایه دیگر طوری نشون بدید که انگار Activity عوض شده.

نظرات

sadeghbarout 12 سال پیش
ممنون استاد . بالاجبار از همون راه اول استفاده کردم :)

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