رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نشان دادن AlertDialog در اکتیویتی جاری برنامه
#1
من یک بکگراند سرویس دارم که بعضی وقتا نیاز داره یک 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 ایجاد کنم و بعد هر زمان که میخوام دیالوگ رو نمایش بدم اون اکتیویتی رو استارت کنم.
پاسخ
تشکر شده توسط:
#2
یه روش بهینه تر اینه که یک کلاس درست کنید به اسم Globals و از Application مشتق کنید:
public class Globals extends Application {
    public static Activity currentActivity;
}

و توی مانیفست در بخش application معرفی کنید:
android:name=".Globals"

بعد یک کلاس از اکتیویتی مشتق کنید:
public class EnhancedActivity extends Activity {
    @Override
    public void onResume() {
        Globals.currentActivity = this;
    }
}

حالا تمام اکتیویتیهای خودتون رو از EnhancedActivity مشتق کنید. اینطوری لازم نیست توی همه onResume رو بازنویسی کنید.
پاسخ
تشکر شده توسط: Eshpilen




کاربران در حال بازدید این موضوع: 1 مهمان