سؤال

لقد حصلت على جدولة تنفذ TabContentFactory ، والتي تبدأ من Asynctask في onCreate () لجلب البيانات الخاصة بعلامات التبويب. عندما ينتهي Asynctask ، يمكن لـ OnPostexecute () تحديث عناصر واجهة المستخدم مباشرة ، أليس كذلك؟ بمعنى ، نظرًا لأن هذه الطريقة تعمل في نظام UI-thread ، فلن تكون هناك حاجة إلى تزامن آخر عند الوصول إلى عناصر واجهة المستخدم؟

على أي حال ، فإن المشكلة التي أواجهها هي أن جهاز U-throad يدعو CreateTabContent () في الجدولة بينما لا يزال Asynctask مشغولًا. لا بد لي من إضافة علامة تبويب واحدة على الأقل ، أو أحصل على nullpointerxception. ولكن كيف يمكنني إضافة علامات تبويب فقط عندما ينتهي Asynctask الخاص بي وتم رفض ProgressDialog؟

سأكون سعيدًا إذا كان بإمكان شخص ما المساعدة ...

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

المحلول

When the AsyncTask has finished, onPostExecute() could directly update the 
UI-elements, right? Meaning, since that method runs in the UI-Thread no further 
thread-synchronization would be required when accessing UI-elements?

حق.

Anyway, the problem I have is that my UI-Thread calls createTabContent() in the
TabActivity while the AsyncTask is still busy.

إذا كنت بحاجة إلى تحديث واجهة المستخدم بينما لا تزال Asynctask قيد التشغيل في الخلفية ، فتجاوز asynctask.onprogressupdate (..) ثم اتصل بـ asynctask.publishProgress (..) من داخل asynctask.doinbackground (..).

I have to add at least one tab, or I get a NullPointerException. But how do I 
only add tabs when my AsyncTask has finished and the ProgressDialog has been 
dismissed?

أنا لا أفهم هذا. هل يمكنك التوضيح بمزيد من التفصيل؟

على أي حال ، راقب هذه الأشياء:

  1. ابدأ Asynctask فقط بعد إنشاء الجدولة بالكامل. ابدأها من OnPostCreate () بدلاً من onCreate (). قد يكون هذا مصدرًا لـ NullPointerException.
  2. يمكنك تحديث أي أنشطة من مؤشر ترابط واجهة المستخدم داخل asynctask.onpostexecute (..)
  3. إذا كنت بحاجة إلى تحديث واجهة المستخدم بينما لا تزال Asynctask قيد التشغيل في الخلفية ، فاستدعاء Asynctask.publishProgress (..) من داخل asynctask.doinbackground (..)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top