مفاهیم کار برنامه نویسی در اندروید
سلام دوستان. تو خیلی از آموزشها میبینیم که یه موردی گفته میشه ولی اصلا بهش اشاره نمیشه که اون چیه. مثلا بارها و بارها دیدم و شنیدم که گفتن که: خوووب حالا یه شیئ از نوع contax ایجاد میکنیم. یا : حالا inflater استفاده میکنیییییییییم.
میبینید هیچ اشاره ای نمیشه و ما هم کپی. پیست میکنیم و صلوات میفرستیم من باب اینکه هیچچی نفهمیدیم. غالبا انگلیسیمون هم خوب نیست و دست به دامن فرومها میشیم. تو این تاپیک قصدم اینه که هر مفهومی که برای برنامه نویسی لازم هست رو بپرسیم و با هم یاد بگیریم و از شر کپی پیستهای ناآگاهانه خودداری کنیم.
برای شروع من میپرسم: منظور از Contex و Inflater چیست؟
نقل قول: مفاهیم کار برنامه نویسی در اندروید
اینجا توضیح خوبی داده:
http://stackoverflow.com/questions/3...ext-in-android
در واقع میگه شما هنگامی که میخواهید دسترسی به اطلاعاتی از خود یک اپلیکیشن یا یک اکتیویتی مثلا داشته باشد از اون استفاده میکنید. در واقع رجوعی هست به اپلیکیشن خودتون یا یک اکتیویتی که معمولا اگر تغییری تو سطح اونها داشته یاشیم نیاز هست به اونها ارجاع یا رقرنس بدیم که بگیم کارمون رو کدوم بخش برنامه داره اعمال میشه.
نقل قول: مفاهیم کار برنامه نویسی در اندروید
اون صفحه رو دیدم و خوندم ولی درست متوجه نشدم. منظور چیه. یه نمه گنگه برام. مثلا چه اطلاعاتی؟ یعنی چیزی رو به صورت گلوبال تعریف و استفاده میکنیم؟
منظور از ارجاع رو هم نمیتونم بفهمم ارجاع به چه چیزی؟ یعنی یه قسمت کار در اکتیویتی اصلی انجام میشه بقیش تو مثلا فرگمنتها و به اکتیویتی اصلی ارجاع میدیم؟ یعنی چی؟
نقل قول: مفاهیم کار برنامه نویسی در اندروید
هر اکنیویتی در واقع در اندروید یک کانتکست برای خ ودش داره هر برنامه هم همینطور. اگر کاری در سطح اینها بخواد انجام بشه یاسد اسمشون بیاد دیگه پس باید از کانتکست استفاده کنید. مصلا وقتی کاری میخوای توی اکنیویتی پیاده کنی باید بگی روی این اکتیویتی قصد دارم انجام بدم پس از اون استفاده میکنید. در واقع وضعیت قعلی از برنامه یا اکتویتی خاص رو برمیگردونه
نقل قول: مفاهیم کار برنامه نویسی در اندروید
کلاس Context کلاس پایه ی خیلی از کلاسهای دیگه مثل Activity هست.
در SDK اندروید برای انجام برخی از کارها، نیاز هست که از شئ/کلاس Context استفاده کنید، مثل دسترسی به منابع، دسترسی به تنظیمات سیستمی، کار با دیتابیس.
برای اینکه مفهوم Context رو بهتر درک کنید یک مثال میزنم:
فرض کنید یک شرکت چندتا مهندس داره، یکی لر، یکی ترک، یکی کرد، یکی بلوچ، یکی عرب....
اینجا یک مسئول تدارکات داریم که وظیفه ش اینه هرچیزی که مهندس ها برای انجام کارشون نیاز دارن براشون تهیه کنه، و البته هم لری میتونه صحبت کنه هم ترکی هم کردی....
مهندس ها همه میتونن با مسئول تدارکات ارتباط برقرار کنن، اما زبون همدیگه رو نمیفهمن، اینحا مسئول تدارکات این گروه رو به هم مرتبط می کنه.
البته مثال دقیق و کاملی نیست، مهندس ها بخش های مختلف اپلیکیشن شما هستن، وقتی اکتیویتی شما می خواد به یه کلاس دیگه بگه برو برام دیتابیس رو باز کن و اطلاعاتت رو بده، دیتابیس ازش درخواست می کنه که پیغامش رو از طریق (درواقع همراه با) Context بفرسته تا بدونه پیغام از کجا اومده و بتونه با کمک اون کارش رو انجام بده.
این مثال ها هیچکدوم نمیتونن دقیقاً رفتار Context رو شرح بدن، چون برای شرح کامل این کلاس و دلیل اینکه وجود داره، باید SDK اندروید رو بررسی کرد و توضیحش داد.
در مورد Inflater:
وقتی شما در ابتدای اجرای اکتیویتی متد setContentView رو صدا می زنید، این متد فایل XML مربوطه رو پردازش می کنه، به داده هایی تبدیلش می کنه که درنهایت باعث میشه Viewها رسم بشن و id ها به سیستم شناسونده بشن.
بعضی وقتا شما نیاز دارید که یک فایل XML رو برای نمایش آماده کنید (مثلاً تو آداپتور مربوط به ListView تا هر سطر رو شخصی سازی کنید و به شکل دلخواه نمایشش بدید.
Inflate همون کار رو میکنه، فایل XML رو برای سیستم در قالب View ترجمه می کنه تا بشه رسمش کرد و یا سایر عملیاتی که با View انجام میشه روش انجام داد
1 ضمیمه
نقل قول: مفاهیم کار برنامه نویسی در اندروید
درود به همه دوستان
اگر در گوگل تایپ کنید android context class شما رو به لینک زیر هدایت میکنه
http://developer.android.com/referen...t/Context.html
در این صفحه توضیحات کاملی برای شما نمایش داده خواهد شد که من سعی میکنم در اینجا به اختصار به اون بپردازم ( البته در حد اطلاعات و توانم )
کانتکس در اصل یک ابسترکت کلاس منحصر به فرد هستش که از کلاس آبجکت اکستند کرده که در اصل ریشه تمام کلاسها در اندروید هست، این ابسترکت کلاس توسط شرکتهای بزرگی مانند سامسونگ و غیره که در تولید تلفنهای همراه بر مبنای اندروید، دست دارند پیاده سازی شده.
اجازه بدید یه کم ساده تر به این موضوع بپردازیم، کانتکس یک ابزار برای معرفی و هندل کردن دیتا میباشد، به بیان ساد تر کانتکست مثل ریموت کنترل تلویزیون شماست و تمام کانالهای تلویزیون بعنوان ریسورسها را در اختیار داره
ضمیمه 139702
حالا چرا به کانتکس کلاس نیاز داریم ؟
بعنوان مثال برای لود کردن یک فونت خاص که شما در فولدر aset از قبل سیو کردید، یا برای لانچ کردن یک اکتیویتی جدید، ایجاد ویوی جدید مثلا ایجاد یک تکست ویو توسط کد نویسی در کلاس جاوا ( البته این کار رو میشه به راحتی در کلاس xml انجام داد بدون نیاز به استفاده از کانتکست، ولی بعضی وقتا نیاز هست که در کلاس جاوا انجام بشه )
مثال ساده اینکه اگر شما برنامه ای مینویسید که باید آلارمی را در ساعت 6 به صدا دربیاره، شما نیاز به AlarmManager دارید که برای دسترسی به اون نیازمند کانتکس کلاس هستید.
مثال دیگه اینکه اگر شما بخواهید یک تکست ویو در کلاس جاوا ایجاد کنید باید به شکل زیر عمل کنید
TextView tv=new TextView(this) ; this =Context
در مثال بالا کانسترکتور تکست ویو از شما یک کانتکست میخواهد، که ما با کلمه کلیدی this به کل کلاس اشاره میکنیم بعنوان یک کانتکست
سه راه برای دسترسی به یک آبجکت کانتکس وجود داره
getApplicationContext() one
getContext() two
getBaseContext() three
اگر شما در یک اکتیویتی خاص باشید و بر روی آن کار میکنید، میتوانید از کلمه کلیدی this برای پاس کردن کانتکست استفاده کنید
دوستان عزیز امیدوارم منو ببخشید که توضیح این مورد را یه کم طولانی کردم، البته تفاوت بین سه روش بالا را توضیح ندادم، فقط به این دلیل که این بخش رو بیشتر از این طولانی نکنم، اگز علاقمند بودید پیام بزارید، با کمال میل براتون توضیح میدم و باز هم تاکید میکنم در حد دانش و توانم توضیح داده خواهد شد
موفق باشید
نقل قول: مفاهیم کار برنامه نویسی در اندروید