Abdulrhman Hasan Agha
Abdulrhman Hasan Agha

@_ahagha

12 تغريدة 16 قراءة May 06, 2020
مع إنتهاء تعلم أساسيات تطوير تطبيقات الأندرويد .. نبدأ نتطلع لمواضيع جديدة متقدمة تساعدنا في تحسين جودة الطريقة المتبعة في بناء التطبيقات وتفادي بعض المشاكل اللي ممكن تواجهنا .. كل مرة رح نحاول ناخذ موضوع جديد و مشكلة جديدة ونتكلم عنها
خلينا نبدأ??
#android #programming #برمجة
بدايتنا رح تكون خفيفة مع ميزة تقدمها وحدة من مكتبات الـ Jetpack وهي مكتبة الـ ViewBinding .. مكتبة مشهورة سهلت طريقة الربط ما بين الـ XML وأكوادك البرمجية .. وخلتنا نستغني عن أشهر سطر برمجي كان يعاني منه مطوري الأندرويد .. وخصوصاً في الواجهات المعقدة
هذه الميزة هي الـ BindingAdapters .. ميزة تعطيك تحكم أكبر بقيم الـ Views الموجودة داخل الـ XML File .. وتقدر كمان تسوي Custom Attribute جديد تكتب فيه Logic خاص فيك وتستخدمه في كامل التطبيق بحيث تقلل من كمية الاكواد المكررة
خلينا ناخذ مثال بسيط على UseCase بسيطة موجودة في أغلب التطبيقات .. ميزة تحميل الصورة من URL معين ووضعها على ImageView .. مع كتابة BindingAdapter بسيط .. تقدر تمرر هذا الـ URL من الـ Layout مباشرة عن طريق Custom Attribute إنت تحدده
خلينا ناخذ UseCase معقدة أكثر .. بما أنه ميزة الـ BindingAdapter تعطينا القدرة على تمرير الـ View اللي طبقنا عليه الـ Custom Attribute سواء كان EditText او TextView أو غيره .. فهذا معناه رح نقدر نسمع للـ Events اللي ممكن تصير على هذا الـ View ونربطها مع Listeners
في هذا المثال .. رح نحاول نغير لون الخط إلى اللون الأحمر لو تجاوز عدد الأحرف العدد اللي رح نمرره داخل الـ XML Layout
الحل بكل بساطة هو ربط TextWatcher وظيفته يسمع لأي تغيير يحصل داخل الـ EditText ويقارن عدد الأحرف المكتوبة بالعدد الممرر وفي حال تجاوزناه رح يحول الخط مباشرة للون الأحمر
باستخدام هذه المثالين بس .. أتوقع رح نقدر نحل كثير من مشاكل الاكواد المكررة ونبدأ نربطها بشكل أسهل مع BindingAdapter .. لكن .. نلاحظ في المثالين إننا دائماً قاعدين نمرر متغير واحد بس غير الـ View .. لنفرض إننا نحتاج نمرر أكثر من متغير .. في هذه الحالة رح نضطر نفصلهم عن بعض
بمعنى آخر .. كل متغير رح نمرره في Custom Attribute مختلف وبعدها داخل الـ Value الخاصة بالـ BindingAdapter رح نرجع نربطهم مع بعض .. ولك الحرية في إختيار ما إذا كان كلا المتغيرين Required أو لا .. بحيث لو مرر المستخدم متغير واحد بس .. رح نرمي Compile-Time Exception
من الميزات الأخرى اللي تقدمها مكتبة الـ ViewBinding .. هي بناء Converters تحول من أي Data Type إنت توفرها إلى String .. شي مشابه لدالة الـ toString بس الاختلاف إننا رح نقدر نستخدمها داخل الـ XML Layout
من المعروف إنه القيمة اللي تكتبها داخل android:text لازم تكون String .. وبالتالي إذا مررت أي DataType ثانية رح ينرمى Run-Time Exception .. وفي هذه الحالة من الضروري توفر Converter يساعد في عملية التحويل
مصادر رح تساعدك في فهم هذا الموضوع وتعطيك أمثلة أكثر عليه
developer.android.com
github.com

جاري تحميل الاقتراحات...