ساخت توابع عمومی با امکان دریافت نام اکتیویتی درحال اجرا! (حل شده)
سلام. عصر همتون بخیر
من میخوام یه تابعی درست کنم در یک کلاس جدا، که توی هر اکتیویتی که اجرا بشه اسم اون اکتیویتی رو بگیره تابع رو اجرا کنه. برای مثال:
یه دکمه داریم در کلاس Main به اسم my_btn. حالا مخواییم یه تابع تعریف کنیم بگیم که آقا اگه روی دکمه my_btn کلیک شد اونوقت از اکتویتی که توش هست بره به فلان اکتیویتی.
اینو میخوام واسه اینکه یه تابعی دارم که طولانیه. بعد توش 10 بار اسم اکتیویتی تکرار شده. میخوام به تابع عمومی ازش تعریف کنم که این تابع اسم اکتیویتی که توش هست رو بگیره و اون رو بزاره توی همه جاهایی که احتیاج به اون اکتیویتی داره. مثلا توی چندجا این متد اجرا شده:
my_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent i=new Intent(Main.this,Other_activity.class);
startActivity(i);
}
});
میخوام بجای این Main.this اسم اکتیویتی که توش هست رو بگیره. چون میخوام این تابع تو چندتا اکتیویتی تکرار بشه.
اگه درست متوجه منظورتون شده باشم؛
به این شکل عمل کنید:
یک کلاس مثلآ بنام BaseActivity بسازین و از Activity میراث بشه. و حالا دیگر کلاس ها رو از BaseActivity میراث بری کنید.
حالا در کلاس BaseActivity یک کانسترکتر (Constructor ) بسازید که پارامتری از جنس Activity رو داشته باشه.
خب الان واسه صدا زدن این کلاس همیشه Activity ایی که اجرا هست، با یک پارامتر this به اون کلاس BaseACtivity ارسال کنید.
پاسخ pggco تا حدودی درسته ، اما نیاز به تکمیل داره
شما وقتی یک اکتیویتی والد داشته باشید به نام baseActivity یا enhancedActivity یا ... که از Activity ها Extends شده
ActivityBase extends Actvity {...}
حالا بقیه ی اکتیویتی ها از اکتیویتی والد شما ارث بری میکنن
ActivityChildA extends ActivityBase {...}
حالا همه ی اکتیویتی ها قبل از شروع شدن ، یه سری صفاتی رو از پدرشون اجرا میکنن و به ارث میبرن ، حالا کافیه شما در onResume اکتیویتی والد بگید
G.currentActivity = this;
که در واقع G.currentActivity اکتیویتی جاری شما هست
----------------
اگر از ساختار کانستراکتوری استفاده کنید ، باید در لحظه ی ساخت شما این مقدار رو تعیین کنید که دسترسی ندارید و عملا در این مورد این کانستراکتور فراخوانی نخواهد شد !
نههههههههههه. مشکلم حل نشده هنوز :(
خب یکی به من بگه من اینو چطوری میتونم توی یه اکتیویتی که extends شده از ListActivity استفاده کنم!؟
ویرایش توسط : محمد حسین
-------------------------------------------------------------------------------------------------------------------------
دوست عزیز برای استفاده از روشی که مجتبی در بالا براتون نوشته و در آموزش ها هم استاد توضیحات لازم رو دادن در اینباره بهتره ارث بری اکتیویتی رو از ListActivity بردارید و از کلاس Enhanced استفاده کنید و لیستتون رو به صورت کاستوم که باز هم آموزش های استاد در اینباره بسیار کامل هست بسازید و مشکلتون حل میشه .
برای لایک زدن هم روی همون نظر زیر بزنید کفایت میکنه :دی
موفق باشید :)
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .