کدنویسی جاوا در پلتفرم اندروید — بخش سوم
![کدنویسی جاوا در پلتفرم اندروید — بخش سوم](https://blog.faradars.org/wp-content/webp-express/webp-images/doc-root/wp-content/uploads/2018/03/Java-Android-p3.jpg.webp)
در بخش دوم به توضیح کلاس بسیار مهم «Activity» یا همان کلاس فعالیت و همچنین نحوه مدلسازی در اندروید پرداختیم. در بخش سوم مبحث کدنویسی جاوا در پلتفرم اندروید، به توضیح تعیینکنندههای سطوح دسترسی (Access Modifiers) و قابها (Fragments) در اندروید خواهیم پرداخت.
تعیینکنندههای سطوح دسترسی
بخش نهایی در بهکارگیری توابع Getter و Setter، تعیین سطوح دسترسی است. به قطعه کد زیر نگاهی بیندازید:
private ArrayList mReminderArrayList; public void setReminderArrayList(ArrayList reminderArrayList) { this.mReminderArrayList = reminderArrayList; }
به کلمات کلیدی «Private» و «Public» دقت کنید. این عبارات در واقع تعیینکننده سطح دسترسی هستند. وظیفه اصلی آنها، مشخص کردن این است که کدامیک از المانهای کلاس مدل شما برای دیگر کلاسها قابلدسترس است. این امر، به کپسوله کردن اشیاء درون برنامه شما کمک میکند. در ادامه، تعریف هر یک از سطوح دسترسی آورده شده است:
- Public – قابلدسترس برای همه اشیاء دیگر. روشها و متغیرهای عمومی API کلاس را تشکیل میدهند.
- Private – تنها برای اشیاء همسطح خود قابلدسترس هستند. این اشیاء حتی برای زیرکلاسها نیز غیرقابلدسترساند.
- Protected – برای اشیاء همسطح خود و زیرکلاسهای آنها در دسترس هستند. برای دیگر اشیاء غیرقابلدسترساند.
متغیرهای عضو، همیشه باید بر روی سطح دسترسی Private یا Protected تنظیم شوند. دسترسی به این متغیرها از بخشهای بیرونی باید توسط توابع عمومی Getter و Setter (مانند قطعه کد بالا) انجام شود. این امر باعث اجتناب از عوارض جانبی با ردیابی دشوار و کدهایی با پیوستگی شدید میشود.
اگر شما یک زیرکلاس برای مدل بالا بسازید و بخواهید که زیرکلاستان به «mReminderArrayList» دسترسی داشته باشد، میتوانید دسترسی آن را به حالت Protected تغییر دهید. این کار دسترسی به متغیر مورد نظر را برای زیرکلاس شما و امکان تغییرات بیشتر یا کار با آن متغیر را برایتان فراهم میکند.
قابها
قبل از پرداختن به موضوع بعدی در مبحث استفاده از زبان جاوا در اندروید، شما باید اطلاعات بیشتری راجع به نحوه تشکیل رابط کاربری یک برنامه اندرویدی کسب کنید. فعالیتها یا همان کلاسهای Activity، برای مدیریت تمام محتوای صفحه بسیار مناسب هستند اما آنها تمایلی به تقسیم کردن صفحه ندارند. خوشبختانه، روش بسیار خوبی برای تقسیمبندی رابط کاربری به اجزای کوچکتر وجود دارد؛ به این اجزای کوچکتر، «قاب» گفته میشود.
قابها نیز مانند فعالیتها هستند. مزیت قابها نسبت به فعالیتها، توانایی فراگیری آنها در فعالیتها مانند View است. قابها، دارای روشهای چرخه حیات مشابه با یک تابع ()onCreate هستند و میتوانند دقیقاً مانند یک فعالیت، ورودی دریافت کنند. طرحبندی یک قاب دقیقاً مشابه با طرحبندی یک فعالیت است. قابها، دارای تعدادی تعریف View هستند. اتصال قاب به کد نیز مانند اتصال فعالیت به کد است. این کار، با تعریف یک View به عنوان متغیر و پیدا کردن آن View به وسیله شناساگری که در طرحبندی فراهم میکنید، انجام میشود. کد ارائه شده در زیر، یک قاب را از طریق فایل طرحبندی موجود در آدرس res/layout/fragment_embedded.xml ایجاد میکند:
public class EmbeddedFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_embedded, container, false); } }
در ابتدای کد، شما کلاس خود را به منظور انتقال رفتار یک قاب گسترش میدهید. پس از آن، یکی از روشهای چرخه حیات، به عنوان مثال ()onCreateView را جهت تنظیم قاب به کار میگیرید. سپس، یک طرحبندی را به منظور نمایش برای آن قاب بخصوص بازگردانی میکنید. هنگامی که فعالیت شما و قاب قرارگرفته در آن به صورت تفکیکشده کار کنند، فرآیند توضیح دادهشده به اندازه کافی ساده خواهد بود اما اگر نیاز به ارتباط اجزای مختلف با یکدیگر باشد چه کاری باید انجام داد؟
در ادامه، مثالی از یک فعالیت آورده شده است که سعی دارد با یک قاب ارتباط برقرار کند:
private void updateFragment() { EmbeddedFragment fragment = (EmbeddedFragment) getFragmentManager().findFragmentById(R.id.fragment_embedded); fragment.setTextViewText("Hello Little Fragment"); }
از آنجایی که این قاب در درون فعالیت قرار گرفته است، میتوانید با استفاده از تابع «()findFragmentById» و شناساگر تعریف شده در فایل XML به قاب دسترسی داشته باشید. سپس، میتوانید به آسانی یکی از روشهای عمومی قاب (مانند تابع ()setTextViewText) را فراخوانی کنید. در مقابل، یک قاب میتواند با استفاده از فراخوانی تابع ()getActivity، با فعالیت مرتبط با خود ارتباط برقرار کند. این امر در بسیاری از مواقع عادی کارایی دارد اما زمانی جالبتر میشود که در یک سناریوی پیچیده مورد بحث قرار گیرد.
در بخش چهارم این مقاله، به توضیح رابطها (Interfaces) و حاشیهنگاریها (Annotations) در اندروید خواهیم پرداخت.
در صورتی که تمایل دارید به سایر بخشهای این مطلب مراجعه کنید، میتوانید از لینکهای زیر استفاده نمایید:
- کدنویسی جاوا در پلتفرم اندروید -- بخش اول
- کدنویسی جاوا در پلتفرم اندروید -- بخش دوم
- کدنویسی جاوا در پلتفرم اندروید -- بخش سوم
- کدنویسی جاوا در پلتفرم اندروید -- بخش چهارم
#