بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

ساخت توابع عمومی با امکان دریافت نام اکتیویتی درحال اجرا! (حل شده)

مدیریت گفتگو
sadra 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام. عصر همتون بخیر

من میخوام یه تابعی درست کنم در یک کلاس جدا، که توی هر اکتیویتی که اجرا بشه اسم اون اکتیویتی رو بگیره تابع رو اجرا کنه. برای مثال:

یه دکمه داریم در کلاس 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 اسم اکتیویتی که توش هست رو بگیره. چون میخوام این تابع تو چندتا اکتیویتی تکرار بشه.

نظرات

sadra 11 سال پیش
کسی نمیتونه راهنمایی کنه ؟؟؟ :(
Criss 11 سال پیش
آموزشهای مروبط به کلاس G و ActivityEnhanced رو ببینید < دیگه نیازی نیست اسم اکتیویتی رو وارد کنید < در صورت استافده از این دو کلاس خود برنامه اکتیویتی در حال اجرا رو تشخیص میده< G.CurrentActivity

پاسخ‌ها 3

احمد اسدی 11 سال پیش

اگه درست متوجه منظورتون شده باشم؛

به این شکل عمل کنید:

یک کلاس مثلآ بنام BaseActivity بسازین و از Activity میراث بشه. و حالا دیگر کلاس ها رو از BaseActivity میراث بری کنید.

حالا در کلاس BaseActivity یک کانسترکتر (Constructor )  بسازید که پارامتری از جنس Activity رو داشته باشه.

خب الان واسه صدا زدن این کلاس همیشه Activity ایی که اجرا هست، با یک پارامتر this به اون کلاس BaseACtivity ارسال کنید.

نظرات

sadra 11 سال پیش
میشه یه نمونه پورٰه بدید یا مثلا اینجا یه کد ساده ازش بزنید لطفا؟ من نفهمیدم چی شد اصن!
sadra 11 سال پیش
میشه یه نفر جواب سوال منو کامل بده؟ :(
sadra 11 سال پیش
دوستان من هنوز جواب سوامو نگرفتما :(
نورحسینی 11 سال پیش
ببین صدرا جان این جمله که دوستمون بهش اشاره کرد : (یک کلاس مثلآ بنام BaseActivity بسازین و از Activity میراث بشه. و حالا دیگر کلاس ها رو از BaseActivity میراث بری کنید) همون مبحث enhancedActivity است که استاد توی پروژه هاش انجام میده و توی فیلم ها میتونی ببینی که مثلا در enhancedActivity اکتیویتی رو بیاره روی حالت onresume البته درست یادم نیست . به این صورت که یک enhancedActivity میسازی و بقیه اکتیویتی ها رو از اون میگیری دیگه به این ترتیب هر کاری لازمه توی همون اکتیویتی انجام میده و اتوماتیک در بقیه هم اجرا میشه . فکر میکنم دوستان با این سرنخ میتونن بیشتر کمکت کنن .
نورحسینی 11 سال پیش
الان یک سرچ کردم دیدم در جلسه ۱۲ در مبحث notes میتونی enhancedActivit رو پیدا کنی .
Criss 11 سال پیش
اموزش این مورد در 2-5 Activity Life Cycle قرار داره
نورحسینی 11 سال پیش
ممنون از criss عزیز . این مورد در دقایق ۳۰ و ۳۶ تا آخر همین فیلم اشاره شده . ولی من هنوز علت این CurrentActivity رو به درستی درک نکردم یعنی نمیفهمم گرفتن اکتیویتی حاضر کجا به کار میاد ؟ کسی میدونه بگه ممنون .
مجتبی یگانه 11 سال پیش

پاسخ pggco تا حدودی درسته ، اما نیاز به تکمیل داره

شما وقتی یک اکتیویتی والد داشته باشید به نام baseActivity یا enhancedActivity یا ...  که از  Activity ها Extends شده 

 ActivityBase extends Actvity {...}

حالا بقیه ی اکتیویتی ها از اکتیویتی والد شما ارث بری میکنن

 ActivityChildA extends ActivityBase {...}

حالا همه ی اکتیویتی ها قبل از شروع شدن ، یه سری صفاتی رو از پدرشون اجرا میکنن و به ارث میبرن ، حالا کافیه شما در onResume اکتیویتی والد بگید

G.currentActivity = this;

که در واقع G.currentActivity اکتیویتی جاری شما هست

----------------

اگر از ساختار کانستراکتوری استفاده کنید ، باید در لحظه ی ساخت شما این مقدار رو تعیین کنید که دسترسی ندارید و عملا در این مورد این کانستراکتور فراخوانی نخواهد شد !

نظرات

sadra 11 سال پیش

نههههههههههه. مشکلم حل نشده هنوز :(

خب یکی به من بگه من اینو چطوری میتونم توی یه اکتیویتی که extends شده از ListActivity استفاده کنم!؟

 

ویرایش توسط : محمد حسین 

-------------------------------------------------------------------------------------------------------------------------

دوست عزیز برای استفاده از روشی که مجتبی در بالا براتون نوشته و در آموزش ها هم استاد توضیحات لازم رو دادن در اینباره بهتره ارث بری اکتیویتی رو از ListActivity  بردارید و از کلاس Enhanced استفاده کنید و لیستتون رو به صورت کاستوم که باز هم آموزش های استاد در اینباره بسیار کامل هست بسازید و مشکلتون حل میشه .

 

 برای لایک زدن هم روی همون نظر زیر بزنید کفایت میکنه :دی

موفق باشید :)

نظرات

کاشی زاده 11 سال پیش
دوست عزیز لطفا برای سوالات کوتاه از بخش نظر استفاده کنید و پاسخ جدید باز نکنید با تشکر
احمد اسدی 11 سال پیش
عزیزجان، شما فصل 5 قسمت دوم آموزش رو ببینید :)
مجتبی یگانه 11 سال پیش
دقیقا ، انجمن برای درک بهتر هست نه درک سریع تر ! ، پس آموزش ها رو قدم به قدم نگاه کنید

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .