من یک بکگراند سرویس دارم که بعضی وقتا نیاز داره یک AlertDialog نشون بده که کاربر yes یا no رو انتخاب کنه.
اولش این AlertDialog رو روی اکتیویتی اصلی برنامه نمایش میدادم، ولی مشکلش این بود که اگر اکتیویتی جاری مثلا اکتیویتی About یا Preferences بود، اونوقت AlertDialog نشون داده نمیشد تا زمانیکه کاربر به اکتیویتی اصلی برمیگشت و اونوقت AlertDialog نمایان میشد.
بخاطر همین اومدم و کاری کردم که AlertDialog با هر اکتیویتی ای که در حال حاضر فعاله اجرا بشه.
برای این هدف اومدم اینطور عمل کردم:
یک کلاس با یک متغییر استاتیک ایجاد کردم که هر زمان اکتیویتی فعال برنامه رو در خودش ذخیره کنه:
شما هم با چنین نیازی مواجه شدید تاحالا؟
البته یه راه دیگری که برای حل این مشکل اول بنظرم رسید این بود که کلا یک اکتیویتی اختصاصی برای اجرای AlertDialog ایجاد کنم و بعد هر زمان که میخوام دیالوگ رو نمایش بدم اون اکتیویتی رو استارت کنم.
اولش این AlertDialog رو روی اکتیویتی اصلی برنامه نمایش میدادم، ولی مشکلش این بود که اگر اکتیویتی جاری مثلا اکتیویتی About یا Preferences بود، اونوقت AlertDialog نشون داده نمیشد تا زمانیکه کاربر به اکتیویتی اصلی برمیگشت و اونوقت AlertDialog نمایان میشد.
بخاطر همین اومدم و کاری کردم که AlertDialog با هر اکتیویتی ای که در حال حاضر فعاله اجرا بشه.
برای این هدف اومدم اینطور عمل کردم:
یک کلاس با یک متغییر استاتیک ایجاد کردم که هر زمان اکتیویتی فعال برنامه رو در خودش ذخیره کنه:
public class Current { public static Activity currentActivity; }بعد در متد onResume تمام اکتیویتی های برنامه، این کد رو نوشتم:
Current.currentActivity=this;بعدهم در اون بکگراند سرویس دیالوگ رو بر اساس اکتیویتی ذخیره شده در Current.currentActivity اجرا میکنم:
AlertDialog.Builder builder = new AlertDialog.Builder(Current.currentActivity); ...این متد کار میکنه، ولی گفتم نظر شما رو بپرسم ببینم بنظرتون مشکلی چیزی نداره؟
شما هم با چنین نیازی مواجه شدید تاحالا؟
البته یه راه دیگری که برای حل این مشکل اول بنظرم رسید این بود که کلا یک اکتیویتی اختصاصی برای اجرای AlertDialog ایجاد کنم و بعد هر زمان که میخوام دیالوگ رو نمایش بدم اون اکتیویتی رو استارت کنم.