الجمعة، 14 فبراير 2014

بعض عجائب برمجة الأندرويد

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

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

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

وبعدين كان فيه مشكلة صغيرة ظهرت على بعض أجهزة المستخدمين وهي إن الخلفية بتاعت القائمة مش بتكون كاملة لو الأسماء قليلة بحيث أنها لا تملء الشاشة (مثلا عند إستخدام ميزة البحث بالاسم) فببساطة قررت إن أغير خاصية (attribute) الطول بتاع القائمة بدل ما أنا عامله على أد المحتوى (wrap_content) أخليه يملء الشاشة دائما حتى لو المحتوى قليل (fill_parent) وبالفعل المشكلة اتحلت، فإذا بي أفاجأ بمشكلة آخرى.


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


وكعادتي حبيت أختبر المشكلة بشكل أكبر لأتأكد من تحليلي وأكتشف كافة جوانبها فأضفت رقم جديد بكود الدولة ليظهر كعنصر ثاني في القائمة فوجدته بالفعل يأخذ لون مختلف عن الشبكة ولكن ما حيرني إنما لما رجعت خاصية طول القائمة إلى wrap_content وجدت العنصر الأول يظهر بشكل طبيعي أما العنصر الثاني فيظهر بلون مختلف عن الشبكة، حاجة تجنن صح :) معاك حق :D


أخيرا جه وقت حل المشكلة:
وجدت نفسي أمامي الكثير من الإختيارات زي إني أترك برمجة الأندرويد وأتوجه إلى منصة أخرى زي الأيفون أكيد يعني مافيهوش الهبل دا :D طلعلي error فقلت أشوف الإختيار التاني :)
الحل الأول: إني أعمل تغيير في كلاس الـ Adapter بدل ما المعادلة (condition) الخاصة بـ if تعتمد فقط على كود الشركة أزود فيها كود الدولة، بس كده بدل ما كان بيعمل في أسوء الحالات 4 حسابات هيوصل 10 حسابات أو معادلات فحسيت إن دا ممكن يثقل بناء القائمة فلم أفضل هذا الحل كثيرا رغم إنه يبدو جيدا بعد التجربة.

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

حياة المبرمج مليانه باجات وأهم مميزات المبرمج الشاطر إنه يقدر يحدد نوع المشكلة ويكون عنده صبر إنه يحلها ويختبر حله لغاية ما يتأكد من دقته (دي مش فكاكة ولا إيه)

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

  1. نعم هذا علم و ليس بفكاكة يا أخ محمد

    لكن لدي استغراب بسيط:
    لماذا فكرت في ترك عالمك المحبوب أندرويد إلى هذا النظام الآخر؟

    ردحذف
    الردود
    1. هههههههه نورتني بتعليقك أخي عبد العزيز

      بخصوص استغرابك فما ذكرته كان على سبيل المزاح :)

      حذف
    2. جزاك الله خيرا
      حتى يا أخي مزاح على وزن عبد الفتاح ههههه، فعلا عندك حق انه ليس بفكاكة أبدا

      حذف
  2. ههههههههههههه
    زي العسل والله يا صوصو :D
    واحشني بجد

    ردحذف
    الردود
    1. حبيبي والله يا بديع :D
      ربنا يكرم أصلك

      حذف
  3. كلام جميل جدا ... وما أظنش فى حد فى المجال ده شاطر الا وتتوفر فيه صفة "رجل المفاجأت" ^_^
    وأعتقد ان اسباب المشاكل دى ... هى تطلب فهم جيد و دقيق لكل حاجة فى اندرويد ... يعنى نظرية "اندرويد سهل " دى مش صحيحه .. ولا ايه ;)
    استمرررررر =D

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

      حذف
  4. هههههههههههههههههه عندنا و عندك خير

    ردحذف
    الردود
    1. هههههههههه يا رب تكون حليت المشكلة حاليا :)

      حذف