سلسلة تعليم برمجة تطبيقات الأندرويد (الدرس السابع والعشرون) - العلم نور

عاجل

{ وَقُلْ رَبِّ زِدْنِي عِلْمًا }

السبت، 13 يوليو 2019

سلسلة تعليم برمجة تطبيقات الأندرويد (الدرس السابع والعشرون)


سلسلة تعليم برمجة تطبيقات الأندرويد
الدرس السابع والعشرون

مرحبا بكم في درس جديد من دروس سلسلة برمجة تطبيقات الأندرويد التعليمية، سنتابع في درسنا هذا ما كنا قد قمنا به في الدرس السابق، حيث كنا قد بدأنا بتعلم كيفية نقل القيم من واجهة إلى أخرى وأنجزنا القسم الأول من العملية والذي اعتمد وقتها على التابع putExtra() عبر استخدام المفهوم الذي تعلمناه سابقاً في الدروس الماضية وهو مفهوم Intent أو ما أسميناه باللغة العربية الجسر، فهي بنا نكمل مشوارنا في هذا التطبيق البسيط والمهم جداً.
لنعود إلى تطبيقنا السابق الذي أسميناه ShopApp ضمن برنامج أندرويد أستديو وتحديداً إلى الواجهة البرمجية MainActivity.java والتي كنا قد كتبنا ضمنها الكود التالي الموضح في الصورة:


ونلاحظ اللون الأحمر الذي كتبت به الكلمة Second التي تعبر عن الواجهة التالية التي نريد الانتقال إليها والسبب في ذلك هو أننا ببساطة لم نقم بإنشاء هذه الواجهة برمجياً بعد ومن هنا سننطلق في درسنا هذا فهي بنا ننشأ هذه الواجهة البرمجية ولن أدخل في تفاصيل إنشاء الواجهة البرمجية لأننا فد تعلمنا ذلك سابقاً بل سأكتفي بوضع صورة نهائية للكود البرمجي للواجهة (ونقصد الكود الأولي) قبل أن نضيف التعليمات الجديدة وهو كما يلي:




وبالعودة إلى الواجهة الأولى ومعاينتها نجد أن اللون الأحمر قد اختفى وهذا منطقي جداً كوننا قمنا بإنشاء الواجهة البرمجية المسماة Second والتي لم يكن المترجم (ونقصد Compiler) قد عثر عليها في البداية أما الآن فقد عثر عليها، ممتاز أليس كذلك؟! طبعا فأجمل ما في البرمجة عملية حل المشاكل الواحدة تلو الأخرى.
الآن سنكمل عملية نقل القيم عبر استقبالها في الواجهة الثانية فكيف نقوم بذلك؟! العملية بسيطة جداً وسنقوم بها عبر الإجابة عن السؤال التالي أولاً: هل ستصل القيم تلقائياً بمجرد فتح الواجهة الثانية أم أننا بحاجة إلى الضغط على زر ما لاستلامها؟! وتأتي أهمية الجواب للسبب التالي:
إن كنا نريد إظهار القيم عند الضغط على زر ما فإننا بحاجة إلى إضافة الطريقة onClick() بعد تعريف الزر برمجياً كما اعتدنا وإضافة الحدث له أما إن أردنا للقيم أن تعرض بشكل تلقائي فعندها لسنا بحاجة لما سبق لأننا سنلجأ إلى كتابة التعليمات في الطريقة onCreate() التي ستعمل تلقائياً بمجرد بدء تنفيذ الواجهة الثانية.
الجواب واضح والحل إذاً واضح، فهي بنا نضيف الكود التالي إلى الطريقة onCreate():
Bundle extras = getIntent().getExtras();
String val1,val2;
int val3,val4;
if(extras != null) {
    val1 = extras.getString(
"Name");
    val2 = extras.getString(
"Item");
    val3 = extras.getInt(
"Count");
    val4 = extras.getInt(
"Total");
}

قد يبدو الكود في البداية معقداً فلا تقلقوا إنه ليس كذلك أبداً فهي بنا نقوم بتوضيحه بشكل مبسط ومفهوم:
الخطوة الأولى التي قمنا بها هي تعريف غرض من الصف Bundle وهو صف مبني مسبقاً في الأندرويد مسؤول عن القيام بمهام مختلفة منها استقبال القيم المرسلة عبر الجسر (ونقصد هنا Intent) وأسمينا هذا الغرض extras وهو اسم لا على التعيين أي تستطيعون اختيار الاسم الذي تريدونه هنا والأهم هو الطرف الثاني من التعليمة والذي يخبر المترجم بإحضار القيم عبر التابع getExtras() وذلك من الجسر الموجود والمعرف حالياً عبر الطريقة getIntent() وتخزين هذه القيم في المتغير extras أي بالمختصر أصبح الكائن (أو الغرض) extras يخزن جميع القيم المرسلة من الواجهة الأولى إلى الواجهة الثانية عبر الجسر Intent الذي كنا قد أنشأناه في الواجهة الأولى وربطناه مع هذه الواجهة.
أما بخصوص التعليمات المتبقية فسنتابعها في الدرس القادم وإلى حينها عليكم التدرب على ما قمنا به، ونلقاكم بكل الود في الدرس القادم.


ليست هناك تعليقات:

إرسال تعليق