ورود

View Full Version : نشان دادن AlertDialog در اکتیویتی جاری برنامه



SZsXsZS
یک شنبه 15 فروردین 1395, 16:56 عصر
من یک بکگراند سرویس دارم که بعضی وقتا نیاز داره یک AlertDialog نشون بده که کاربر yes یا no رو انتخاب کنه.
اولش این 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 ایجاد کنم و بعد هر زمان که میخوام دیالوگ رو نمایش بدم اون اکتیویتی رو استارت کنم.

rezaricky
یک شنبه 15 فروردین 1395, 18:13 عصر
سلام .
بنظر من هم این روش ، روش مناسبیه .
میتونید بجای کلاس Activity از Context استفاده کنید که عمومی تره .
یک مطلب هم اینکه سعی کنید بجای اکتیویتی از فرگمنت استفاده کنید تا کارایی و سرعت برنامه بالاتر بره .
و بجای Dialog و AlertDialog هم گوگل پیشنهاد میکنه از DialogFragment استفاده بشه .
http://stackoverflow.com/questions/7977392/android-dialogfragment-vs-dialog
http://stackoverflow.com/questions/13765127/dialogfragment-advantages-over-alertdialog