سلسلة
تعليم برمجة تطبيقات الأندرويد
الدرس العاشر
كنا قد توقفنا في الدرس السابق
أعزاءنا عند مشكلة ظهرت لنا وتلخصت برسالة خطأ على الشكل التالي:
Unfortunately,
MobileApp has Stopped
|
فما هو سبب ظهور هذه الرسالة؟!
وماذا تعني؟! سنتعرف على إجابات هذه الأسئلة بعد قليل فاربطوا الأحزمة لننطلق ...
في الدروس الأولى من سلسلتنا
التعليمية كنا قد تعرفنا على مكونات أي تطبيق من تطبيقات الأندرويد ومن هذه
المكونات تحدثنا عن مكون رئيسي ومهم جداً وهو AndroidMainfest.xml وباستذكار بسيط لما مر نستطيع أن نقول بأنه المكان الذي يتم فيه
تعريف كل الواجهات (ونقصد هنا Activities) الموجودة ضمن التطبيق وفيما يلي صورة للكود
البرمجي الموجود ضمن هذا الملف:
ويمكنكم أن تلاحظوا أنه يوجد وسم
يسمى application وهذا الوسم يمثل التطبيق وضمنه وسم يسمى activity وهذا الوسم
يمثل الواجهة (ونقصد بوسم الكلمة الموجودة ضمن <> ولكل وسم
مجموعة من الخواص التي تحدد صفة معينة أو تعطي هذا الوسم خاصية محددة (مثل label مثلاً التي
تمثل اسم التطبيق) وفي هذا الملف كما قلنا منذ قليل لا بد من أن يكون هناك تعريف لكل
الواجهات الموجودة في التطبيق فهل ملف Mainfest في تطبيقنا
يستوفي هذه الشروط؟! لنعيد صياغة السؤال بطريقة أخرى، هل قمنا بإضافة الواجهة
الجديدة التي قمنا بإنشائها وإضافتها إلى تطبيقنا (ونقصد هنا SecondAct)؟! والجواب
ببساطة أننا لم نقم بذلك وبالتالي هناك خلل ما وهذا النقص الحاصل هو الذي سبب
المشكلة التي ظهرت لنا وكما يقال "إذا عُرف السبب بطل العجب" والآن
سنتجه لحل هذه المشكلة فكيف يتم ذلك؟! ببساطة ما علينا سوى إضافة الكود البرمجي
التالي إلى ملف AndroidMainfest.xml كما يلي:
<activity
android:name=".SecondAct" android:label="@string/app_name" > </activity> |
وأول سؤال سيخطر ببالكم هو أين
سنضع هذا الكود بالضبط؟! الجواب أنه يجب وضعه ضمن وسم application وبعد نهاية
وسم activity الأول أي كما هو واضح في الشكل التالي:
فهي بنا لنقم بشرح بسيط للكود البرمجي
السابق:
السطر الأول يعني أننا نعرف وسم
جديد باسم activity وهي كلمة محجوزة (أي ليست اسم عشوائي وإنما
يجب الالتزام به) ومن ثم تعريف خاصيتي رئيسيتين في هذا الوسم وهما كما يلي:
الخاصية name: وتعني اسم
الواجهة البرمجية وهنا قد يحتار بعضكم ويتساءل عن أي واجهة القصد لا تقلقوا
المقصود هو الواجهة البرمجية (أي ملف java الذي يمثل الكود البرمجي للواجهة وليس ملف xml الذي يمثل
تصميم الواجهة) وهنا كتبنا SecondAct مسبوقاً بنقطة ولابد من التأكيد على حساسية
حالة الأحرف يجب الالتزام بالحروف الكبيرة والصغيرة هنا وكتابة الاسم كما هو
تماماً.
الخاصية label: وتمثل
عنوان الواجهة وهنا لا داعي لأن نعدل أي شيء عن الواجهة السابقة فنترك قيمة هذه
الخاصية كما هي في الواجهة السابقة.
بعد أن أنهينا كتابة الكود البرمجي
علينا الضغط على زر الحفظ في الأعلى لحفظ التغييرات الجديدة التي قمنا بها كما
توضح الصورة التالية:
ويبقى قبل تجريب التطبيق للتأكد من
عمله أن ننوه لكم عن أن الواجهة الرئيسية في التطبيق أي التي ستعمل في البداية عند
تشغيل التطبيق هي الواجهة التي تتمتع بالخاصية التالية:
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> |
والكود السابق يجب أن يكون موجود
ضمن وسم الواجهة الرئيسية فقط أي يكتب لمرة واحدة فقط ولذلك لم نكتبه في الواجهة
التي قمنا بإضافتها إلى ملف Mainfest.
لما يتبقى عليكم سوى تشغيل التطبيق
ومعاينته للتأكد من أن كل شيء يعمل على ما يرام وذلك بظهور الواجهة الثانية عند
الضغط على زر Start في الواجهة الأولى.
وهكذا نصل على نهاية درسنا الحالي
ونلقاكم بكل محبة في الدرس القادم فانتظرونا ...
ليست هناك تعليقات:
إرسال تعليق