سؤال

أريد أن أجعل مربع حوار تقدمية وهمية يظهر لمدة 2 أو 3 ثوان. لن تفعل أي شيء آخر غير القول. لدي الرمز:

    ProgressDialog dialog = ProgressDialog.show(this, "", "Detecting...",
            true);
    dialog.show();

    dialog.dismiss();

ولكن ما الذي أضعه بين العرض ، والفصل لظهور الحوار لبضع ثوان؟ شكرًا!

هل كانت مفيدة؟

المحلول

الطريقة الصحيحة - لا تمنع موضوعك الرئيسي ، لذلك يبقى واجهة المستخدم مستجيبة:

dialog.show();

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    public void run() {
        dialog.dismiss();
    }
}, 3000); // 3000 milliseconds delay

نصائح أخرى

        progress.setProgress(100);
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            public void run() {
                pdialog.dismiss();
            }}, 3000);

تستطيع ايضا استخذام CountDownTimer من Android الذي هو أكثر كفاءة بكثير من أي حل آخر تم نشره ويدعم أيضا حرائق على فاصل منتظم من خلالها onTick() طريقة.

إلقاء نظرة على هذا المثال ،

 new CountDownTimer(3000, 1000) {

     public void onTick(long millisUntilFinished) {
             // You don't need anything here
     }

     public void onFinish() {
         dialog.dismiss();
     }
  }.start();

يمكنك أن تفعل شيئًا كهذا:

new AsyncTask<Void, Void, Void>
{
    ProgressDialog dialog = new ProgressDialog(MainActivity.this);
    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        dialog.setTitle("Please wait");
        dialog.setMessage("Preparing resources...");
        dialog.setCancelable(false);
        dialog.show();
    }


    @Override
    protected Void doInBackground(Void... params) {
        try{
           Thread.sleep(3000);
        } 
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    @Override
    protected void onPostExecute(Void aVoid) 
    {
        super.onPostExecute(aVoid);
        if (dialog!=null && dialog.isShowing())
        {
            dialog.dismiss();
        }
    }
}.execute();

لا شيء يأتي بين الإقالة والإظهار .. الوقت يعتمد عليك. على سبيل المثال ، سيظهر مربع الحوار قبل وصول الخادم وسوف يرفض الحصول على وسائل النتيجة

 dialog.show();
 ServerCall();
 dialog.close();

إذا كنت بحاجة إلى تأخير فارغ يعني ، فاستخدم CountDownTimer Call بين ذلك ..

في حال كان شخص ما يبحث عنه Xamarin.Android (باستخدام C#) المحلول (من إجابة بيتر كنيجو)، هنا هو كيف:

new Handler().PostDelayed(() => { 
    dialog.dismiss();
}, 1000);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top