English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

مشكلة عدم التوافق في إضافة fragment في Android

توليد وشرح Fragment

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

أتعلمت أمس عن Fragment في Android. وفقًا لتعليمات الموقع الرسمي، أنشأت فئة جديدة تُدعى BlankFragment، تُنقل من Fragment. ثم حدث خطأ أثناء التجميع:

خطأ: فشل تنفيذ مهمة ':app:processDebugManifest'.
> فشل مزج Manifest : قيمة الخاصية meta-data#android.support.VERSION@value value=(26.0.0-beta1) من [com.android.support:design:26.0.0-beta1] AndroidManifest.xml:28:13-41
  موجود أيضًا في [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0).
  إقتراح: أضف 'tools:replace="android:value"' إلى عنصر <meta-data> في AndroidManifest.xml:26:9-28:44 لتحديد.

بحثت قليلاً، وكل شيء يُقال. أكثر الأمور غير الوثوقية هي ما يقولون إنه يجب تغيير علامة android:name في ملف manifest إلى class. من الواضح أن هذا مرتبط بالإصدار! بعد ذلك، تم العثور على حل يتوافق مع الإصدار، ويجب إضافة الشيفرة التالية إلى ملف build.gradle في مجلد app:

كل التكوينات {
  للحلقة في كلDependency { تفاصيل الحلقة details ->
    تعريف requested = details.requested
    إذا (مطالب المجموعة == 'com.android.support') {
      إذا (!requested.name.startsWith("multidex")) {
        details.useVersion '26.0.0-beta1'
      }
    }
  }
}

جربت وأتممت. لكن لا يمكن أن تكون كافية.

لاحظوا، فقط فوق هذا الكود المضافة، يصف المكتبات الاعتمادية للمشروع:

الاعتماديات {
  تنفيذ fileTree(dir: 'libs', include: ['*.jar'])
  تنفيذ 'com.android.support:appcompat-v7:26.0.0-beta1'
  تنفيذ 'com.android.support.constraint:constraint-layout:1.0.2'
  تنفيذ 'com.android.support:design:26.0.0-beta1'
  تنفيذ 'com.android.support:support-v4:26.1.0'
  تنفيذ اختبار 'junit:junit:4.12'
  تنفيذ اختبار الأندرويد 'com.android.support.test:runner:0.5'
  تنفيذ اختبار الأندرويد 'com.android.support.test.espresso:espresso-core:2.2.2'
}

وفي هذا السطر أدناه، سيكون هناك خط أحمر:

تنفيذ 'com.android.support:appcompat-v7:26.0.0-beta1'

إذا مررتم الفأرة عليها، سيظهر تنبيه:

جميع مكتبات com.android.support يجب أن تستخدم نفس تسمية النسخة الدقيقة 
(الخلط بين الإصدارات يمكن أن يؤدي إلى تحطم في وقت التشغيل). 
إيجاد إصدارات 26.1.0، 26.0.0-beta1. أمثلة تشمل com.android.support:support-compat:26.1.0 
وحدة التحكم الأندرويد:26.0.0-beta1

هذا ليس واضحًا بما يكفي: يجب استخدام نفس الإصدار من جميع المكتبات التي تعتمد على com.android.support! انظر إلى Dependency، حيث com.android.support:appcompat-v7:26.0.0-beta1 و com.android.support:support-v4:26.1.0 هما إصداران متعارضان. انظر إلى سجلات git، السطر 26.1.0 هو الجديد الذي تم إضافته، وهو بالتأكيد تم إضافته عند إنشاء BlankFragment class تلقائيًا بواسطة AndroidStudio. ثم انظر إلى سجلات الأخطاء، فهي تقول نفس الشئ؟

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

بالإضافة إلى ذلك، لغة جافا سكريبت الخاصة بملف gradle ممتعة جدًا. التعليقات لها أسلوب C/C++، وبيان الدوال له أسلوب Python، وLambda expressions تشبه قليلاً C#.

النهاية

ما تم ذكره أعلاه هو مشكلة عدم التطابق في الإصدار بين إضافة fragment إلى Android التي قدمها المحرر للجميع، نأمل أن يكون هذا مفيدًا لكم، إذا كان لديكم أي استفسارات، فلا تترددوا في ترك تعليق، وسأقوم بالرد على رسائلكم في الوقت المناسب. شكرًا جزيلاً أيضًا لدعمكم لموقع呐喊 التعليمي!

البيان: محتويات هذا المقال تم جمعها من الإنترنت، حقوق النشر تعود إلى مالكها، المحتويات تم تحميلها من قبل مستخدمي الإنترنت بشكل تلقائي، ويستخدم هذا الموقع حقوق الملكية الخاصة، لم يتم تعديل المحتويات بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية متعلقة بذلك. إذا كنت قد وجدت محتويات مشكوك فيها فيما يتعلق بالحقوق المتعلقة بالملكية الفكرية، فلا تتردد في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال #بـ @) لتقديم الشكوى، وتقديم الأدلة ذات الصلة، وإذا تم التحقق من ذلك، سيتم حذف المحتويات المشكوك فيها فورًا.

تحب أن ترى