/What's Activity ? -سلسلة تعلم أندرويد بالعربي -1-

What's Activity ? -سلسلة تعلم أندرويد بالعربي -1-

بداية ما هو الـ Activity ؟

هو أحد المكونات الرئيسية التي نستخدمها  في أي تطبيق أندرويد ، وترجمة الكلمه للغة العربية تعني نشاط وقد رأيت في أحد المنتديات العربية ترجمه أعجبتني لها وهي فعالية ، ولتقريب المعني فهو يقصد به  شاشة أو نافذه كالتي نستخدمها في الويندوز .. ودعونا نتفق أننا سنفهم معناه ولكن لن نستخدم أي من هذه الترجمات فسنطلق عليه دائما أكتفيتي.

مما يتكون الـ Activity ؟

يتكون من مكونين رئيسين المكون الأول وهو class وهذا الذي نستخدمه لكتابة الكود مثل هذا الكلاس (HelloWorldActivity.java) الموجود داخل فولدر src كما تعرفنا عليه في الدرس السابق ، والمكون الثاني هو ملف الـ xml والذي نستخدمه لتصميم الواجهه التي تظهر للمستخدم مثل ملف (main.xml) الموجود في هذا المسار res/layout كما تعرفنا عليه أيضا في الدرس السابق.

تشبيه: يمكنك تخيل أن الأكتفيتي داخل التطبيق كالطوبه التي نستخدمها لبناء جدار ما ، فمثلا لو تطبيقنا يحتوي علي 3 شاشات فنحن نحتاج إلي 3 أكتفيتي … كل واحد منها يتكون من عنصرين احدهما الكلاس الذي نستخدمه لكتابة الأكواد بلغة الجافا والعنصر الآخر عباره عن ملف xml والذي يمثل الواجهه التي تظهر للمستخدم حتي يتفاعل معها ، ويتم الربط بين الملفين بالطريقه التي سنبينها في الجزء التالي.

ثانيا : التعرف علي الـ Activity :

في هذه الجزئيه سنرجع إلي الدرس السابق لاستخدام أول تطبيق لنا لكي نتعرف علي الأكتفيتي ، التطبيق كان باسم HelloWorld وقبل عمل أي تعديلات عليه كان يحتوي علي كلاس باسم HelloWorldActivity.java وهو احد مكونات الاكتفيتي وكان يظهر بهذا الشكل

كما رأينا هذا الكود لم نقم بكتابته إنما تم إضافته بشكل تلقائي عند بناء التطبيق فهيا بنا نتعرف علي أسطر هذا الكود…

السطر الأول يحتوي علي اسم الحزمة التي قمنا بكتابتها عند انشاء هذا التطبيق.

السطر الثالث والرابع يتم استخدام كلمة import لاستدعاء كلاسات موجوده في المكتبات التي قمنا بتثبيتها في تجهيز بيئة التطوير وهذه الكلاسات مبنيه بشكل مسبق لاستخدامها بكثره في اشياء مهمه ومتكرره.

السطر السادس بداية الإعلان عن كلاس جديد وبالتأكيد فهو الكلاس الذي نحن به الآن ، ويتم استخدام كلمة extends لوراثة كلاس آخر موجود ومعد بشكل مسبق في المكتبات مثل كلاس باسم Activity ، والوراثه بتمكنني من استخدام كل المتغيرات والدوال المعرفه في هذا الكلاس والتعديل عليها بالشكل الذي أريده … هذه نبذه بسيطه عن الوراثه فهي من مفاهيم برمجة الـ Object-oriented

السطر السابع هذا ما يسمي بالتعليق ويتم استخدام معه علمات معينه تفتح عند أول السطر وتغلق مع نهاية التعليق كما تري لكي يعرف المترجم ان هذا ليس جزء من الكود انما هو تعليق يقوم بكتابته المبرمج لتوضيح نقطه معينه او اعطاء معلومات عن ميثود مستخدمه للتسهيل علي نفسه وغيره من المبرمجين عند الرجوع إلي الكود.

السطر الثامن هذه العلامه تدل علي ان الميثود القادمه موجوده بنفس الاسم داخل كلاس Activity وهو الكلاس الاب واننا نقوم بعمل ميثود بنفس الاسم في الكلاس الابن.

السطر التاسع بداية الإعلان عن ميثود جديده واسمها onCreate ويتم استخدامها عند بداية إنشاء الأكتفيتي فهي تمثل بداية دورة حياة الأكتفيتي وسنتكلم عن الـ Activity LifeCycle بعد وقت قصير إن شاء الله.

السطر العاشر تستخدم كلمة super لتمرير كل محتويات الميثود الموجوده داخل الكلاس الاب الي الميثود الموجوده داخل الكلاس الابن.

السطر الحادي عشر هذه الميثود يتم استخدامها للربط بين هذا الكلاس والملف الذي يحتوي علي الواجهه الذي أريدها أن تظهر علي الشاشة ، الميثود اسمها setContentView وتأخذ بارامتر بين الأقواس يحتوي علي الـ ID الخاص بملف الـ xml

ملاحظه: هذا الـ ID يتم عمله بشكل تلقائي من خلال ملف R.java الذي تكلمنا عنه في الدرس السابق.

السطر الثاني عشر و الثالث عشر غلق الأقواس الخاصه بالميثود والكلاس.

ملاحظه: معظم المفاهيم التي تكلمنا عنها في هذا الجزء خاصه بالـ object-oriented ومن المفترض ان من يتابع هذه السلسله عنده علم بهذه المفاهيم ولكن أنا ابسطها علي قدر المستطاع بدون اطاله للتسهيل علي المبتدئين في البرمجة بشكل عام.

المكون الآخر للأكتفيتي وهو ملف الـ main.xml وكان يظهر بهذا الشكل قبل اي إضافات

نحن نستخدم لتصميم الواجهات في الأندرويد لغة الـ xml وهي لغة سهله جدا ويمكنك أخذ فكره عنها من خلال هذا الموضوع

ونحن سنتكلم عن تصميم واجهات المستخدم او ما تسمي بـ UI بالتفصيل مع الدروس القادمه إن شاء الله تعالي ، ولكن ما أريد أن أركز عليه في هذا الكود هو السطر رقم 10

الذي يحتوي علي السمه الخاصه باظهار نص كتابي ونستخدم علامة @ لكي نوضح أن هذا النص موجود داخل ملف strings.xmlالموجود في هذا المسار res/values وهذه الطريقه هي التي سنستخدمها بشكل مستمر ومن مميزاتها انها تساعد في عمل ترجمه للتطبيق لعدة لغات بصوره سهله ، وسنتعلم في التطبيق القادم كيفية إضافة قيمه جديده لهذا الملف.

ملخص لأساسيات بناء واستخدام الـ Activity :

لكي نقوم بعمل أكتفيتي جديد فنحن نقوم بعمل class جديد الذي يقوم بعملية extends للكلاس الرئيسي Activity ، لذلك فالأكتفيتي دا عباره عن كلاس جافا يعني كله كود برمجي وعشان يقدم تفاعل مع المستخدم بنقوم بعمل UI له باستخدام ملفات xml ونقوم بربط الكلاس بملف الـ xml عن طريق استخدام ميثود setContentView.

وكل أكتفيتي في التطبيق يجب أن يتم إعلانه في ملف المانيفست AndroidManifest.xml فالمانيفست هو المسئول عن تنظيم كل مكونات تطبيقي ولذلك يجب أن أقوم بعمل إعلان عن أي أكتيفيتي أضيفه عشان النظام يقدر يوصله ، طاب لو معملتش هذا الإعلان ماذا سيحدث؟ لما أعمل للبرنامج تشغيل ومحاولة بدأ هذا الأكتفيتي هيديني Exception.

طاب إزاي أعمل للملف إعلان في المانيفست:

باستخدام عنصر <activity> وعنصر <intent-filter> بهذا الشكل

وقد نتكلم عن ملف المانيفست بالتفصيل أكثر عند الحاجه إن شاء الله.

ثالثا : دروة حياة الـ Activity :

سنتعرف في هذه الجزئيه علي الـ Activity Lifecycle وهي فعلا زي دورة حياتنا بتبتدي بنشئة الأكتفيتي ثم تمر بعدة مراحل إلي أن يتم قتل هذا الأكتفيتي ولكن لا تحزنوا فيمكننا إعادة الحياة للأكتفيتي وعمل له ريستارت :) ليظهر من جديد وهذه المراحل بتختلف علي حسب حاجة المستخدم لهذا الأكتفيتي ، وكل مرحلة لها ميثود معينه نستخدمها لكتابة كود ينفذ ما نريد في هذه المرحله وهذه صوره لتوضيح هذه المراحل.

ولتطوير أي تطبيق قوي وسلس يجب أن يكون هناك اهتمام بإدارة دورة حياة أي أكتفيتي بواسطة ما يسمي callback ميثود لأن ذلك بيكون له تأثير مباشر بالمزامنة مع بقية الأكتفيتي وقد نوضح ذلك أكثر في الدرس االقادم.

رابعا : تطبيق لعمل Activity جديد :

بدلا من أن يكون الدرس كله نظري فنريد أن نقوم بتطبيق ما نتعلمه فسامحوني علي إطالة الدرس ولكن أمامكم أسبوع كامل لمذاكرة الدرس وإدراك جميع المعلومات الجديده والسؤال حول أي نقطه غير واضحه.

في الدرس السابق قمنا بعمل تطبيق باسم HelloWorld سنستخدمه أيضا في هذا الدرس مع عمل بعض التعديلات لتعلم كيفية إضافة شاشة جديدة تظهر عند الضغط علي الزر الموجود في الشاشة الرئيسية التعديلات ستكون كالآتي:

1-  إضافة كلاس جديد وليكن اسمه Activity2

  •    نضغط بزر الماوس الأيمن علي اسم الحزمه الموجود داخل فولدر src ثم نختار New > Class كما بالصوره

  هيظهر لنا شاشة سنملأها بالبيانات مثل ما بالصوره التالية ثم نضغط Finish

ملاحظه: هناك خانتين فقط في الصوره الماضيه التي سنقوم بتعديل بياناتهما ، الخانة الأولي وهي اسم الكلاس الجديد ، والخانة الثانية خاصه بالكلاس الأب ليضيف لنا بشكل تلقائي في الكود كلمة extends ، وللتسهيل عند كتابة اسم أي كلاس سواء في هذه الشاشة أو بداخل الكود يمكنك كتابة أول أحرف من اسم الكلاس ثم الضغط علي Ctrl+Space من لوحة المفاتيح لينتج لك كل الاحتمالات التي تبدأ بهذه الأحرف لاحظ الصوره

  في هذه الخطوه نريد أن نقوم بعمل override لميثود onCreate بالشكل التالي هنختار من القايمه العلويه Source > Override/Implement Methods… لتظهر لنا هذه الشاشة لنختار الميثود التي نريدها ثم نضغط Ok

2-  إضافة ملف الـ xml وعمل تصميم للواجهه

  •   هنقوم بعمل copy لملف الـ main.xml ثم الضغط بالزر الأيمن للماوس علي فولدر layout واختيار paste لتظهر لنا هذه الشاشة

هنقوم بتغير اسم الملف الجديد ليصبح مثلا welcome.xml ثم نضغط Ok وبذلك يصبح بداخل فولدر layout ملفين بهذا الشكل

هنقوم بفتح ملف welcome.xml لعمل بعد التعديلات علي التصميم ليصبح الكود بهذا الشكل

بالتأكيد ستجد عندك خطأ في السطر الـ 15 لأنك تستخدم علامة @ لتشير إلي مصدر من نوع string اسمه welcome ونحن لم نقم بإضافته بعد ، لذلك سنقوم بفتح ملف strings.xml الموجود في هذ المسار res/values ليظهر لك كما بالصوره فتختار Add

ستظهر لك شاشة بها جميع العناصر التي يمكنك إضافتها إلي المصادر وفي حالتنا هذه سنختار String ثم نضغط Ok كما بالصوره

ومن الجزء الأيمن الذي سيظهر في الملف سنقوم بكتابة اسم المصدر الموجود في الكود وهو welcome وفي الخانة الثانية سنقوم بكتابة القيمه التي نريد أن يحتويها هذا المصدر ولتكن مثلا Welcome to Android App Development كما بالصوره

  •  ثم في النهاية نضغط علي Ctrl+s في لوحة الكيبورد لحفظ ما قمنا بتعديله في هذا الملف يستحسن أن تتعود علي هذه الحركة بعد كل تعديل تقوم به في الكود
  •    والأن ما رأيك أن نذهب لكي نري الشكل الجديد الذي سيظهر علي الشاشة بعد هذه التعديلات .. فقط قم بإختيار Graphical Layout الموجوده في أسفل يسار الشاشة كما فعلنا من قبل ليظهر لك التصميم بهذا الشكل

3-  هنرجع إلي الكلاس الذي قمنا بإنشاءه لإضافة ميثود setContentView التي ستقوم بإظهار هذا التصميم عند بداية هذا الأكتفيتي ليصبح الكود في ملف Activity2.java بهذا الشكل النهائي

4-  في هذه الخطوه سنقوم بإضافة الأكتفيتي الجديد إلي ملف الـ AndroidManifest.xml لكي يستطيع النظام التعرف عليه عند تشغيل التطبيق كما قلنا من قبل فيصبح الكود بهذا الشكل

5-  تعديل ملف الـ main.xml بالشكل الآتي

لاحظ ما قمنا بتعديله هو إضافة الكتابه التي نريدها أن تظهر إلي المصادر ثم الإشاره إليها في هذا الكود ، وأيضا قمنا بإضافة سيمه خاصه بالتعامل مع هذا الزر لكي نستعملها في كود الكلاس لتشغيل الشاشة الجديده عند الضغط علي هذا الزر.

ملاحظه: عند فتح ملف strings.xml يمكنك أن تضيف إليه كما فعلنا المره الماضيه ، وهناك طريقه أخري أيضا بإستخدام الكود كما فعلنا في ملف المانيفست ويمكنك التبديل بينهما عن طريق التبويب الموجود في أسفل يسار الشاشة فإذا قمت بإختيار تبويب strings.xml سيظهر لك جميع المصادر التي قمنا بإضافتها لهذا الملف ويمكنك التعديل عليها وإضافة غيرها من خلال هذا الكود كما بالصوره

6-  تعديل كلاس الـ HelloWorldActivity.java بالشكل التالي

لاحظ أنا فقط أضفت ميثود جديده اسمها handleClick ومهمتها هي إطلاق الأكتفيتي الجديد عند الضغط علي الزر الموجود في الأكتفيتي الرئيسي.

7-  الخطوه الأخيره يا بطل … مافيش خطوه تانيه خلاص J كل ما عليك هو أن تقوم بتجربة البرنامج الآن لتراه يعمل بشكل جيد إن شاء الله وإذا ظهرت معك أي مشكله ترفعها في التعليقات.