في الدرس السابق تعلمنا مقدمة عن ال Intent وكيف ننتقل من واجهة الى أخرى . في هذا الدرس سنتعلم انواع ال Intent وطريقة ارسال معلومات من واجهة الى اخرى وانتظار النتائج من الواجهة الثانية الى الاولى .
أنواع ال Intent :
- Explicit Intent : في هذا النوع يتم تحديد نوع الاجراء المستخدم اما بدء واجهة جديدة startActivuty او تنفيذ خدمة stertService او Broadcast , غالباً نستخدم هذا النوع لتنفيذ واحد من هذه الاجرائات في نطاق نفس التطبيق لسهولة الوصول الى class اي واجهة .
- Implicit Intent : وفيه يمكن تنفيذ عدة اجرائات من خارج التطبيق مثل اذا اردنا تشغيل واجهة قادرة على تصفح وعرض الانترنت , بحيث يمرر Implicit Intent من نوع ACTION_VIEW .
مكونات ال (Intent) :
- Component : هنا نحدد المكان المرسل والمستقبل في ال Intent بحيث تكون البداية من الواجهة الاولى المتواجدين فيها this الى المكان المستقبل اسم الواجهة . class .
- Action : وهي بعض الاجرائات اليمكن استخدامها بواسطة ال Intent عرض مكونات صفحة ويب او ارسال بريد الكتروني او اجراء اتصال من داخل التطبيق بواسطة تطبيقات اخرى .
اهم ال Actions :
*ACTION_VIEW : يستخدم لعرض معلومات للمستخدم كصفحة ويب او صورة او موقع على خريطة او غيره *ACTION_SEND : يستخدم كإرسال البيانات ومشاركتا اما بواسطة بريد الكتروني او رسائل نصية وغيرها او مشاركتها على وسائل التواصل الاجتماعي . - Data :هي عبارة عن object من نوع uri يشير الى نوع البيانات المحمولة في هذا ال Intent .
- Extras : هي عبارة عن حافظةهنا يمكن ارسال البيانات عن طريق دالة putExtra() بحيث يعرف لكل معلومة key خاص بها ليتمكن المستقبل من تمييز المعلومات الواصلة .
اما في الواجهة الاخرى عند استقبال البيانات فيمكن عن طريق دالة ()getExtra
كما في المثال التالي
;()Intent intent = this.getIntent
;(“String name = intent.getExtra().getString(“key
Starting an activity for a result
في هذا الجزء سنتعلم كيف ننشئ Intent لتشغيل واجهة جديدة مع انتظار النتائج .
مثلا في صفحة انشاء عضوية في احدى المواقع اذا اردنا من المستخدم ان يضغط على زر اختر البلد من واجهة فيها قائمة البلدان فعند الاختيار نريده الرجوع للواجهة الاولى ومعه نتيجة اختياره للبلد فهنا نستخدم Start activity for result
الشكل التالي يوضح مبدأ عمل Start activity for result
سنقوم بعمل مثال لتوضح المعلومة ونطبق كافة الافكار في الدروس السابقة :
سوف ننشئ واجهة فيها Button مكتوب بداخله اختر اسماء اصدقائك المفضلين بحيث ننتقل الى واجهة اخرى فيها قائمة اسماء نختار الاسماء ونرجع للواجهة الاولى لعرض الاسماء المختارة .
كما هو موضح بالشكل التالي :
- نقوم بإنشاء مشروع فيه واجهتين الاولى فيها Button والثانية فيها قائمة بأسماء الاصدقاء بحيث تتضمن الاسم وبجانبها CheckBox .
- في دالة ال Button نعرف Intent ونحدد له الطريق الى الواجهة الثانية ونطلب منه ارجاع قيم اسماء الاصدقاء المختارة.
;(Intent intent = new Intent(this , activityTwo.class
;(startActivityForResult(intent , 99
*دالة startActivityForResult تأخذ قيمتان الاولى intent والثانية كود اي رقم لتتأكد عند ارجاع المعلومات انك تملك الرقم مثل Password .
- ونقوم بتعريف Array فيها اسماء الاصدقاء مع رقم خاص لكل اسم بحيث عند ارجاع الارقام من الصفحة الثانية نقارنها في هذه ال Array لنطبع الاسماء.
- في الواجهة الثانية نقوم بحفظ الارقام اللتي تم اختيارها من ال CheckBox ونرجعها للواجهة الاولى عن طريق دالة :
(setResult(99 , intent
نلاحظ انه يجب تحديد الرقم الذي كتبناه في الواجهة الاولى Password - في الواجهة الاولى وفي دالة OnActivityResult
نتأكد انت ال Request code اللذي تم ارساله هو نفسه اللذي تم ارجاعه
} (if (requestCode == 99
}
ونقوم بمقارنة الارقام الراجعة من واجهة الاسماء مع ال Array بواسطة For Loop
ونطبع الاسماء المختارة .