Arabic subtitles

12-36 Casting with findViewById - Solution

Get Embed Code
13 Languages

Showing Revision 2 created 12/28/2015 by Fran Ontanaya.

  1. دعونا ننظر للرقم 1
  2. قبل أن أكشف لكم عن الجواب، سأقوم
    بنسخ هذا الكود
  3. و لصقه في "Android Studio"
  4. أريد أن أريك ما نوع الخطأ الذي سيظهر
  5. الآن عندما كنت تقوم بحل الاختبار، لم تكن
    بحاجة لاستخدام "Android Studio"
  6. قد تكون حللته فقط بالنظر إلى الكود هنا
  7. و من ثم كتابه الإجابة
  8. إذا، في حال استخدامك "Android Studio"
    أو عدمه، لا بأس بالنسبة إلي
  9. لجعل الكود يعمل، قمت بإنشاء
    مشروع جديد
  10. و بعد ذلك قمت بتعديل ملف التصميم
    Activity_Main
  11. حتى يكون فيه عدد من الـ views التي تملك هذه
    المعرّفات (IDs) التي سنشير إليها
  12. لست على ثقة بالشكل الذي سيتخذه
    هذا التصميم
  13. لكنني أردت فقط أن أضع الـ views هنا مع
    أسماء المعرّفات (IDs) المطابقة لكل منها
  14. بهذه الطريقة، سيعمل الكود الخاص بي هنا
  15. إذاً من أجل الكود الأول، قمت بلصق الكود
    هنا، و أرى أن هنالك خطأ
  16. يقول "Android Studio" بأنه لا يستطيع تنفيذ
    الطريقة setText
  17. إن كنت تتذكر من الفيديو الماضي
  18. ذكرت أن setText هو طريقة خاصة
    بالصف TextView
  19. مما يعني أنك تستطيع استدعاء هذه الطريقة
    فقط مع أغراض من الصف TextView
  20. في هذه الحالة، نحن نستدعيها مع
    الغرض nameTextView
  21. و قد تم التصريح عن nameTextView
    كغرض من الصف View
  22. نحن بحاجة إلى تغيير هذا الغرض إلى
    غرض من الصف TextView
  23. ثم نحصل على خطأ يخبرنا بوجود أنماط متضاربة
  24. و المطلوب هو TextView غرض من
    النمط TextView
  25. لكن بدلاً من ذلك تم العثور على غرض من
    النمط View
  26. ذلك لأن الطريقة findViewById تعيد غرض
    من النمط View
  27. و هذا الجانب الأيسر يتطلب غرض
    من النمط TextView
  28. هذا يعني أنه علينا إضافة هذا حتى نقوم
    بقصر ال view المعاد من
  29. الطريقة findViewById إلى متحول
    من النمط TextView
  30. يمكننا بعدها تخزين هذا الشيء كاملاً
  31. والذي هو nameTextView فيالمتحول
    الموجود في الجانب الأيسر
  32. عندها يختفي الخطأ، و يصبح بإمكاننا أن نضع
    هذا النص "Laura" في هذا الـ TextView
  33. الخطأ موجود في السطر الأول ، لذا قمت
    الكود الصحيح ها هنا
  34. التفسير العام هو أننا بحاجة لقصر هذا
    الـ View إلى TextView
  35. ثم تخزين هذه القيمة داخل المتحول
    nameTextView
  36. بهذه الطريقة يمكنننا
    استدعاء nameTextView.setText
  37. والتي هي طريقة من الصف TextView
    على السطر التالي من الكود هنا
  38. دعونا ننتقل إلى الكود رقم 2
  39. سأقوم بنسخ الكود و وضعه في "Android Studio"
  40. وها هو الكود الذي ألصقته
  41. يبدو السطر الأول من الكود صحيحاً
    ليست هناك أية أخطاء
  42. ولكن السطر الثاني يحوي تسطيراً
    باللون الأحمر
  43. يقول الخطأ أن هناك أنماطاً متضاربة
  44. كما و يقول أن تم العثور على int
    بدلاً من String
  45. لفهم هذا بشكل أفضل
  46. ينبغي لنا أن نبحث عن الطريقة getMaxLines
    ضمن وثائق TextView
  47. في وثائق TextView
    سأقوم بالبحث عن
  48. الطريقة getMaxLines
  49. وها هي ذا
  50. ليس لها أية وسائط دخل
  51. و القيمة المعادة من هذه الطريقة هي من
    النمط الصحيح
  52. ولهذا السبب كان "Android Studio" يتذمر
    لأن هذه الطريقة
  53. كانت تعيد قيمة من int
  54. و نحن كنا نحاول تخزينها في
    متحول من String
  55. ونتيجة لذلك، أنا بحاجة لتغيير نمط البيانات
    الخاص بالمتحول ليصبح من النمط int
  56. ثم يختفي الخطأ
  57. إذاً، القيمة المعادة من هذه الطريقة
    هي من النمط الصحيح
  58. بحيث يمكننا أن نخزنها
    في المتحول maxLines
  59. مازال هناك تحذير
  60. يقول إن المتحول maxLines لم يتم
    استخدامه قط
  61. ولكن هذا الكود هو مجرد قصاصة
  62. أفترض أنه إذا كان
    هذا تطبيقاً نظامياً
  63. فإننا حقيقةً سنرغب في استخدام هذا
    المتحول لاحقاً
  64. إذاً، الخطأ موجود في السطر الثاني وها
    هو الكود المصحح
  65. التفسير العام هو أن القيمة المعادة من هذه
    الطريقة كان يجب أن
  66. تكون من int
  67. دعونا ننتقل إلى الكود رقم 3
  68. وها هو الكود رقم ثلاثة
  69. قمت بنسخ الكود الموجود في السؤال
    الثالث و لصقه في "Android Studio"
  70. هناك رسالة خطأ تخبرنا
    بوجود أنماط متناقضة
  71. تم العثور على متحول من النمط view في حين
    أن المطلوب هو متحول من النمط ImageView
  72. هذا مماثل للخطأ الذي رأيناه للتو مع
    المتحول من النمط Textview
  73. تعيد هذه الطريقة متحولاً من النمط View
  74. كنا نحاول تخزينه في متحول من النمط
    ImageView في الجانب الأيسر
  75. لذا نحن بحاجة لقصر هذا الغرض من النمط View
    إلى غرض من النمط ImageView
  76. هذا الكود صحيح لأن الغرض View مع
    ID icon هو غرض من ImageView
  77. لذا لا بأس بقصره إلى
    النمط ImageView
  78. الآن يتم تقويم الجانب
    الأيمن إلى ImageView
  79. يمكننا تخزين ذلك في المتحول الموجود
    على الجانب الأيسر
  80. نمط البيانات لهذا التمحول هو ImageView
    الآن كل شيء متطابق
  81. و قد اختفى الخطأ
  82. في السطر التالي، يمكننا استدعاء طريقة
    من النمط ImageView
  83. و هي الطريقة setImageResource
    لهذا الغرض IconImageView
  84. بقي خطأ واحد يخبرنا أن الطريقة لا تستطيع
    تحليل الرمز logo
  85. هذا لأنني فقط لم أقم بإضافة صورة تحمل
    الاسم logo إلى تطبيقنا
  86. إن أضفت ذلك، سيزول الخطأ، إذاً الكود
    الذي لدينا هنا صحيح
  87. وها هو الكود الصحيح حيث أجريت عملية
    قصر على متحول من ImageView
  88. وأخيراً، لدينا الكود رقم 4
  89. قمت بلصق الكود هنا في "Android Studio"
    و بشكل مفاجىء، لا توجد أخطاء
  90. يحاول الكود العثور على view يحمل
    الـ id الذي يساوي title
  91. و الذي يجب أن يعيد View، و يتم تخرين هذا
    الأخير في متحول من النمط TextView
  92. للـTextView نمط بيانات
    وهو عبارة عن View
  93. وهذا يتطابق مع الجانب الأيمن، إذاً هذا
    السطر من الكود كله صحيح
  94. في السطر التالي نقوم بأخذ هذا الغرض
    و الذي هوغرض من النمط View
  95. سنقوم باستدعاء الطريقة setVisibility
    لنطبقها عليه
  96. تأخذ الطريقة وسيط دخل
    واحد وهو View.GONE
  97. يمكنني التحقق من الوثائق
    حتى أؤكد هذا
  98. في وثائق الصف View
    يمكنني البحث عن
  99. الطريقة setVisibility
  100. أستطيع أن أرى أن الطريقة setVisibility
    هي من طرق الصف View
  101. و ستتطلب للدخل قيمة من int
    تمثل حالة الرؤية
  102. قيم الرؤية المتاحة هي VISIBLE و INVISIBLE
    و GONE
  103. بما أن الطريقة setVisibility هي طريقة
    من الصف View
  104. فهذا هنا استدعاء صحيح
  105. ليس هناك حاجة لقصر هذا
    المتحول إلى TextView
  106. لأن الطريقة التي نقوم باستدعائها هي
    طريقة من الصف View
  107. الآن إن كنا نحاول استخدام طريقة
    من الصف TextView
  108. فسنكون بحاجة إلى قسر
    المتحول إلى TextView
  109. إذاً يجب أن تضع "no error"
    كإجابة على هذا السؤال
  110. لأن الطريقة setVisibility هي طريقة من View
    و لا بأس إن أبقيناه غرضاً من View
  111. كانت هذه الأسئلة صعبة
  112. لا بأس إن لم تجب عليها بشكل صحيح
  113. في الاختبار التالي، ستكون لديك فرصة
    التدرب على هذا أكثر