دسترسی به activity در کلاس های غیر اکتیویتی

یکی از محدودیت هایی که در برنامه نویسی اندروید نسبت به سایر زبان های برنامه نویسی وجود داره اینه که تقریبا در 90 درصد قسمت های اندروید به شیء context یا activity نیاز داریم . برای مثال برای استارت یک سرویس اگه از یک activity بخواهیم سرویس رو استارت کنیم فقط کافیه بنویسیم :

اما حالا فرض کنید که ما یک کلاسی ساختیم و این کلاس یک Activity نیست و قراره تو این کلاس یک سرویس رو استارت کنیم ! اما مشکل اینه که دیگه اینجا نمیتونیم از کد بالا برای استارت سرویس استفاده کنیم چون کلاس ما از اکتیویتی مشتق نشده . برای حل این مشکل چند راه وجود داره :

  • استفاده از constructor یا سازنده :

اگه کلاس ما قراره در قسمتی دیگه ای از برنامه نمونه سازی یا Instantiate بشه میتونیم یکی از پارمتر های Constructor رو شیء Context یا Activity بذاریم :

با این روش شیء activity در تمام کلاس ما قابل استفاده است.

  • استفاده از شیء Activity در پارامتر های متد :

فرض کنید شما میخواهید با استفاده از یک متد، یک پنجره درخواست اجازه از یوزر رو باز کنید مثلا درخواست اجازه دسترسی به مخاطبین یا کارت حافظه ، و فرض کنید برای اینکار یک متدی استاتیکی نوشتیم که فقط  مجوزی که برای همون بخش رو نیاز داریم مثلا Manifast.permission.WRITE_EXTERNAL_STORAGE  رو به عنوان پارامتر بهش میدیم و متد پنجره  همون درخواست رو برای ما نشون میده . اینجا ما میتونیم یکی از پارامتر های متدی که تعریف کردیم رو شیء Activity بذاریم و برای بررسی نتیجه انتخاب یوزر هم از متد onActivityResult همان اکتیوی استفاده کنیم .

  • استفاده از کلاس Application :

برای دسترسی به متد های یک اکتیویتی در کلاس های دیگه ای که خودشون Context دارن میتونیم از این روش استفاده کنیم . ابتدا یک کلاس به اسم مثلا MyApplication میسازیم که از کلاس Application مشتق شده باشه :

سپس این کلاس باید به عنوان خاصیت name مربوط به تگ <application> فایل AndroidManifast.xml قرار داده بشه :

بعد از این اگر به کلاس MainActivity و متد هایش نیاز داشتیم در متد onCreate کلاس MainActivity به این صورت عمل میکنیم :

و در آخر در کلاس یا اکتیوتی دیگه ای که به متد های کلاس MainActivity نیاز داریم از این کد ها استفاده میکنیم :

  • استفاده از Activity به صورت استاتیک :

حال فرض کنید که هیچ کدوم از روش های بالا  برای ما قابل استفاده نیست حالا به هر دلیلی ! اینجا میتونیم از این روش استفاده کنیم که اول یک شی استاتیک از Actitity در یکی از اکتیویتی های که بهش نیاز داریم میسازیم برای مثال فرض کنید به شیء Activity یا Context کلاس MainActivity نیاز داریم :

حالا برای استفاده از خاصیت شیء activity کلاس MainActivity فقط کافیه هرجا که بهش نیاز داریم با استفاده از کد زیر ازش استفاده کنیم :

اما تا حد امکان سعی کنید یک اکتیوی رو به صورت استاتیک استفاده نکنید یا اگه استفاده کردید از شی context اون استفاده کنید به این صورت که :

به این مطلب چه امتیازی میدهید ؟

اشتراک
باخبر شدن از
guest
0 Comments
Inline Feedbacks
View all comments