سؤال

لديّ asynctask أظهرت فيه تقدمًا في onpreexecute ، وأخفيه مرة أخرى في onpostexecute ، شيء مثل

final class UploadTask extends AsyncTask {
   ProgressDialog dialog = new ProgressDialog(...);

   protected onPreExecute() {
      dialog.show();
   }
   protected onPostExecute() {
      dialog.hide();
   }
};

يمكن إلغاء الحوار ويختفي بالفعل عندما أضغط على زر الإلغاء أثناء تنفيذ Asynctask.

عندما يحدث هذا ، أود تشغيل بعض التعليمات البرمجية لإلغاء Asynctask أيضًا (في الوقت الحالي ، حتى أنه اعتقد أنه يتقدم بعيدًا ، يستمر Asynctask في الركض ويكمل في النهاية). حاولت اشتقاق صفي من ProgressDialog ثم أفعل

setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss(DialogInterface d) {
   /* do something */
   }
};

(أو شيء مشابه مع oncancellistener) ، ولكن هذا ببساطة لا يتم استدعاؤه.

أيه أفكار؟ أنا فقط بحاجة إلى بعض الآلية للمستخدم لإلغاء Asynctask قيد التشغيل أثناء عرض ProgressDialog.

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

المحلول

لم أختبر هذا ، لكن جرب شيئًا كهذا:

    final class UploadTask extends AsyncTask implements OnDismissListener{
       ProgressDialog dialog = new ProgressDialog(...);

       protected onPreExecute() {
           dialog.setOnDismissListener(this);
          dialog.show();
       }
       protected onPostExecute() {
          dialog.hide();
       }

       @Override
        public void onDismiss(DialogInterface dialog) {
            this.cancel(true);
        }
};

نصائح أخرى

أعتقد أنك تبحث عن هذا: OnCancelled ()

http://developer.android.com/reference/android/os/asynctask.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top