کدنویسی جاوا در پلتفرم اندروید — بخش دوم

در بخش اول به توضیح ساختار سیستم عامل اندروید و ارتباط آن با جاوا پرداختیم. در این قسمت مبحث کدنویسی جاوا در پلتفرم اندروید، به توضیح کلاس بسیار مهم «Activity» یا همان کلاس فعالیت و همچنین نحوه مدلسازی در اندروید خواهیم پرداخت.
کلاس Activity
کلاس فعالیت یا (Activity)، یک شیء اختصاصیافته به یک صفحه مخصوص در یک برنامه است. این کلاس را به عنوان عامل به کار گیرنده و نمایشدهندهی همهی فعالیتهای مرتبط که باعث کنترل کاربرد آن صفحه میشود، در نظر بگیرید. از آنجایی که برنامه شما حداقل یک یا دو تابع خواهد داشت، منطقی است که برای جلوگیری از شلوغ شدن رابط کاربری، توابع را در راستای چند صفحه پراکنده کرد. برای ایجاد یک صفحه، باید یک کلاس جدید جاوا ایجاد کرده و مانند کد زیر، آن را گسترش دهید:
public class MainMenuActivity extends Activity { }
به همین سادگی، شما یک بخش از برنامه خود را برای یک هدف مشخص جدا کردید. در این مرحله، کلاس Activity شما هنوز قادر به تشخیص هدف خود نیست؛ چراکه در بخش {}، دستوری مبنی بر نوع عملکرد و نحوه نمایش آن تعریف نشده است. شما میتوانید نحوه نمایش یا همان طرحبندی (Layout) فعالیت مد نظر خود را با دو روش تعریف کنید:
- تعریف و ایجاد طرحبندی در یک فایل XML
- ایجاد طرحبندی با استفاده از برنامهنویسی در یک کلاس جاوا
گزینه اول، روش رایجتری است. در صورت نیاز به ایجاد سفارشی برخی از جنبههای طرحبندی، بهتر است از رویکرد برنامهنویسی استفاده کنید. در این مقاله، در مورد هیچیک از روشهای ایجاد طرحبندی توضیح داده نمیشود. با این حال، اگر قصد دارید برنامههای اندرویدی بنویسید، درک چگونگی ایجاد طرحبندی میتواند برایتان مفید باشد. قطعه کد زیر نشان میدهد که چگونه میتوانید مشخص کنید که یک فعالیت با استفاده از طرحبندی XML در مسیر مشخص (res/layout/activity_main_menu.xml) نحوه نمایش خود را تعیین کند.
public class MainMenuActivity extends Activity { // 1 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 2 setContentView(R.layout.activity_main_menu); // 3 } }
بگذارید بخش بخش این کد را بررسی کنیم:
- در ابتدا، شما تابع «()onCreate» را بازفراخوانی (Override) میکنید. این کار، یکی از روشهای موجود در یک کلاس Activity است. این تابع در هنگام ایجاد Activity اجرا میشود و زمان کافی برای تنظیم موارد مورد نیاز را برایتان فراهم میکند. این رویه، اولین روشی است که اغلب برای ایجاد Activity استفاده میشود.
- سپس، اجرای سوپرکلاس ()onCreate را فراخوانی میکنید تا از اجرای همهی تنظیمات مورد نیاز برای Activity اطمینان حاصل شود. اجرای این مرحله ضروری است. اگر این کار را انجام ندهید، برنامه شما به همراه یک اخطار، کرش (Crash) خواهد کرد.
- در انتها، شما به Activity دستور میدهید تا با استفاده از تابع ()setContentView، یک صفحه را به نمایش درآورد و طرحبندی ارجاعدادهشده از طریق کلاس (R) را در آن قرار دهد.
R، یک کلاس ویژه بوده که توسط اندروید برای بخشهای مختلف برنامه ایجاد شده است. این بخشها میتوانند شامل طرحبندی صفحهنمایش (مانند مثال بالا) یا بخشهایی مانند یک رشته محلی، تصویر یا انیمیشن باشند. اندروید، کلاس R را در هنگام ساخت یک برنامه ایجاد میکند، از اینرو، شما نباید به هیچوجه تغییری در آن ایجاد کنید.
طرحبندی XML، حاوی المانهایی است که باعث ایجاد رابط کاربری میشود. شما میتوانید به المانهایی مانند R در Activity دسترسی داشته باشید. به قطعه کد زیر دقت کنید:
public class MainMenuActivity extends Activity { TextView mTextView; Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_menu); mTextView = (TextView) findViewById(R.id.textview_main_menu); mButton = (Button) findViewById(R.id.button_main_menu); } }
نکتهی کلیدی در این کد، تابع «()findViewById» است. این تابع، در درون طرحبندی XML، به دنبال اشیاء کلاس «View» مشخصشده با ID میگردد و امکان تغییر آنها از طریق جاوا را فراهم میکند. از آنجایی که تابع findViewById، تنها یک شیء View را بازگردانی میکند، شما باید تبدیل داده (Typecast) هر فراخوانی را در یک زیرکلاس مناسب View انجام دهید.
زمانی که به المانهای منفرد کلاس View در درون کد جاوا دسترسی پیدا کردید، باید قادر به تعامل با این المانها و تعریف عملکردهای مد نظر خود در آنها باشید. قطعه کد زیر، نحوه اضافه کردن یک عملکرد به برنامه در هنگام کلیک کردن کاربر بر روی یک دکمه را نشان میدهد:
public class MainMenuActivity extends Activity { TextView mTextView; Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_menu); mTextView = (TextView) findViewById(R.id.textview_main_menu); mButton = (Button) findViewById(R.id.button_main_menu); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mTextView.setText("Hello World"); } }); } }
هر زمانی که کاربر بر روی دکمه مورد نظر کلیک کند، کد بالا، تابع «()onClick» را اجرا میکند. در این تابع، شما به «TextView» فرمان میدهید که در هنگام کلیک بر روی دکمه، متن «Hello World» را به نمایش دربیاورد. با استفاده از این رویکرد ساده برای متصل کردن المانهای View به کلاس مخصوص و سپس اجرای یک عملکرد بر اثر انجام یک کار مشخص (کلیک کردن)، شما میتوانید فعالیتها و عملکردهای پیچیدهای را ایجاد کنید. اگر تمام این مراحل اساسی را در ذهن داشته باشید، میتوانید نحوه ارتباط بین جاوا و اندروید را درک کنید.
شروع مدلسازی
از موارد بسیار مهم و ضروری در نوشتن برنامههای اندرویدی، مدلها هستند. مدلها، امکان ایجاد اشیاء حاوی ساختارهای داده و عملکردهایی را به فراهم میکنند که شما میتوانید با استفاده از آنها، تأثیر قابل توجهی را در برنامه خود به وجود بیاورید.
مدلها در کلاسهای جداگانهای از کلاسهای UI قرار دارند. این جدایش، نهتنها باعث بهبود سازماندهی برنامه شما میشود بلکه با ایده کپسولهسازی در برنامهنویسی شیءگرا نیز همخوانی دارد. یک مدل معمول، شبیه به مثال زیر است:
public class ReminderList { private ArrayList mReminderArrayList; public ReminderList() { mReminderArrayList = new ArrayList<>(); } public void setReminderArrayList(ArrayList reminderArrayList) { this.mReminderArrayList = reminderArrayList; } public ArrayList getReminderArrayList() { return mReminderArrayList; } public void removeLastItemFromList() { if (!mReminderArrayList.isEmpty()) { mReminderArrayList.remove(mReminderArrayList.size() - 1); } } }
همانطور که مشاهده میشود، هیچ خبری از کلاسهای View و Activity در این مدل نیست و تنها ساختارهای داده، انواع دادههای خام و توابع مختلف در آن وجود دارد. در واقع، این مدل تنها یک شیء «Plain Old java Object - POJO» است و هیچ فرآیند مخفیانهای در آن وجود ندارد. این مدل کاملاً کپسوله شده است؛ یعنی شما میتوانید آن را درون هر برنامه اندرویدی وارد کرده و فوراً شروع به استفاده از آن کنید.
در هنگام ایجاد یک شیء در دیگر زبانهای مبتنی بر برنامهنویسی شیءگرا، مرسوم است تعدادی متغیر نمونه که به صورت سراسری در درون متن شیء تعریف شده باشند را ایجاد کرد. در اندروید همچنین مرسوم است که این متغیرهای نمونه را به همراه یک پیشوند «m» ایجاد شوند. به این ترتیب، تشخیص متغیرهای نمونه غیرعمومی غیر ایستا از دیگر متغیرها آسان میشود. این موضوع در ابتدا کمی عجیب به نظر میرسد اما بهتر است که به آن عادت کنید چراکه کد منبع یا همان «سورسکد اندروید» (Android Source Code)، این قرارداد را تعیین میکند و شما نیز برای مشارکت مستقیم در سورسکد اندروید باید این قرارداد را رعایت کنید.
توابع (Getter) و (Setter) برای متغیرهای عضو نیز به عنوان یک بخش عمده و اساسی در توسعه اندروید به حساب میآیند. این روشهای کوتاه، ساخت باقی برنامه شما را به همراه روشی برای تغییر یک متغیر عضو (در صورت نیاز) فراهم میکنند. به علاوه، این توابع امکان فراهم کردن رفتارهای بیشتر در هنگام دریافت و تنظیم متغیرهای عضو را به وجود میآورد.
در بخش سوم این مقاله، به توضیح تعیینکنندههای سطوح دسترسی (Access Modifiers) و قابها (Fragments) در اندروید خواهیم پرداخت.
در صورتی که تمایل دارید به سایر بخشهای این مطلب مراجعه کنید، میتوانید از لینکهای زیر استفاده نمایید:
- کدنویسی جاوا در پلتفرم اندروید -- بخش اول
- کدنویسی جاوا در پلتفرم اندروید -- بخش دوم
- کدنویسی جاوا در پلتفرم اندروید -- بخش سوم
- کدنویسی جاوا در پلتفرم اندروید -- بخش چهارم
#