ViewPager2

عرض "طرق العرض" أو "اللقطات" بتنسيق قابل للتمرير
آخر الأخبار الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار الأولي
‫14 مايو 2024 1.1.0 - - -

التبعيات في AndroidX

لاستخدام ViewPager2، أضِف تبعية AndroidX التالية إلى ملف build.gradle في مشروعك:

Groovy

dependencies {
    implementation "androidx.viewpager2:viewpager2:1.1.0"
}

Kotlin

dependencies {
    implementation("androidx.viewpager2:viewpager2:1.1.0")
}

الملاحظات

تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مشكلة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية من خلال النقر على زر النجمة.

إنشاء مشكلة جديدة

يُرجى الاطّلاع على مستندات Issue Tracker للحصول على مزيد من المعلومات.

الإصدار 1.1.0

الإصدار 1.1.0

‫14 مايو 2024

تم طرح androidx.viewpager2:viewpager2:1.1.0. يتضمّن الإصدار 1.1.0 هذه التعديلات.

التغييرات المهمة منذ الإصدار 1.0.0

  • إصلاح الأعطال عند استخدامها مع RecyclerView 1.3.1-rc01 أو إصدار أحدث
  • تعبئ ViewPager2 الآن CollectionInfo وCollectionItemInfo بشكل صحيح، بينما لم يعُد RecyclerView 1.2.0-alpha02 والإصدارات الأحدث يعبئانها تلقائيًا.
  • تمت إضافة واجهة FragmentTransactionCallback للاستماع إلى تغييرات دورة حياة الأجزاء التي تحدث داخل FragmentStateAdapter.
  • تم إصلاح المشكلة FragmentStateAdapter المتعلّقة بظهور قائمة الجزء الأوّلي عند إضافة جزء إلى FragmentManager.
  • تم إصلاح عملية إرسال هوامش النافذة: تحصل جميع الصفحات الآن على الهوامش نفسها. بسبب طريقة إرسال WindowInsets في إصدارات واجهة برمجة التطبيقات القديمة (أقل من المستوى 30 لواجهة برمجة التطبيقات) التي يمكن أن تمنع توفّر الحواف الداخلية للعناصر الشقيقة، يجب الموافقة على هذا الإصلاح من خلال WindowInsetsApplier.install(viewPager2) إذا كنت تريد تطبيق الحواف الداخلية على الأجهزة التي تعمل بإصدار أقل من المستوى 30 لواجهة برمجة التطبيقات.

الإصدار ‎1.1.0-rc01

‫1 مايو 2024

تم إصدار androidx.viewpager2:viewpager2:1.1.0-rc01 بدون أي تغييرات ملحوظة منذ الإصدار 1.1.0-beta02. يتضمّن الإصدار 1.1.0-rc01 هذه التعديلات.

الإصدار 1.1.0-beta02

‫24 مايو 2023

تم طرح androidx.viewpager2:viewpager2:1.1.0-beta02. يتضمّن الإصدار 1.1.0-beta02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة عمليات رد الاتصال لحفظ حالة Fragment إلى FragmentTransactionCallback. (I45b90)
  • لم يعُد ViewPager2 يحاول إصلاح عملية إرسال WindowInsets المعطَّلة لإصدارات واجهة برمجة التطبيقات القديمة (أقل من 30)، لأنّ الإصلاح نفسه قد يكون ضارًا بالعناصر المشابهة لـ ViewPager2. لا يزال الحلّ متاحًا، ولكنّه أصبح يتطلّب الموافقة لكي يتمكّن المطوّرون من اتّخاذ القرار بشأن كل حالة على حدة. فعِّل ميزة "الإصلاح" من خلال الاتصال بالرقم WindowInsetsApplier.install(viewPager2)). (Ic9a85)

إصلاح الأخطاء

  • حلّ مشاكل التوافق مع الإصدارات الأحدث من RecyclerView على مستخدمي هذا الإصدار من ViewPager2 الترقية إلى الإصدار 1.3.1-rc01 على الأقل.RecyclerView

الإصدار 1.1.0-beta01

‫4 أغسطس 2021

تم طرح androidx.viewpager2:viewpager2:1.1.0-beta01. يتضمّن الإصدار 1.1.0-beta01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • ترقية androidx لاستخدام الإصدار 1.4 من Kotlin (Id6471 وb/165307851 وb/165300826)

  • الانتقال إلى استهداف الإصدار 8 من Java لجميع مكتبات androidx (2923f39)

إصلاح الأخطاء

  • تم إصلاح عملية إرسال هوامش النافذة، وأصبحت جميع الصفحات تتلقّى الهوامش نفسها. (I47fef)

الإصدار ‎1.1.0-alpha01

1 نيسان (أبريل) 2020

تم طرح androidx.viewpager2:viewpager2:1.1.0-alpha01. يتضمّن الإصدار 1.1.0-alpha01 هذه التعديلات.

يتضمّن هذا الإصدار تغييرًا في RecyclerView 1.2.0-alpha02 من خلال ملء CollectionInfo وCollectionItemInfo اللذين لم يعُد RecyclerView يوفّرهما تلقائيًا. عند التحديث إلى RecyclerView 1.2.0-alpha02، يجب أيضًا تحديث ViewPager2 لتجنُّب حدوث مشاكل في إمكانية الوصول.

الميزات الجديدة

  • تمت إضافة واجهة FragmentTransactionCallback للاستماع إلى تغييرات دورة حياة الأجزاء التي تحدث داخل FragmentStateAdapter. (Ibda77)

إصلاح الأخطاء

  • تم إصلاح المشكلة FragmentStateAdapter المتعلّقة بظهور قائمة الجزء الأوّلي عند إضافة جزء إلى FragmentManager. (I9d2ff، b/144442240)

الإصدار 1.0.0

الإصدار 1.0.0

‫20 نوفمبر 2019

تم إصدار androidx.viewpager2:viewpager2:1.0.0 بدون أي تغييرات منذ الإصدار 1.0.0-rc01. يتضمّن الإصدار 1.0.0 هذه التعديلات.

الميزات الرئيسية في الإصدار 1.0.0

  • التحسينات التي تم إجراؤها على عملية تنفيذ ViewPager السابقة:
    • إتاحة التنسيق من اليمين إلى اليسار
    • التوافق مع الاتجاه العمودي
    • دعم موثوق لـ Fragment (بما في ذلك التعامل مع التغييرات في مجموعة Fragment الأساسية)
    • رسوم متحركة لتغيير مجموعة البيانات (بما في ذلك إتاحة DiffUtil)
  • سهولة نقل البيانات من عملية التنفيذ السابقة ViewPager (توافق واجهة برمجة التطبيقات حيثما أمكن ذلك) راجِع دليل نقل البيانات ونموذج التطبيق.

اطّلِع على الدليل حول استخدام ViewPager2 للتمرير سريعًا بين "اللقطات".

الإصدار 1.0.0-rc01

‫23 تشرين الأول (أكتوبر) 2019

تم إصدار androidx.viewpager2:viewpager2:1.0.0-rc01 بدون أي تغييرات منذ 1.0.0-beta05. يتضمّن الإصدار 1.0.0-rc01 هذه التعديلات.

الإصدار ‎1.0.0-beta05

‫9 أكتوبر 2019

تم طرح androidx.viewpager2:viewpager2:1.0.0-beta05. يتضمّن الإصدار 1.0.0-beta05 هذه التعديلات.

إصلاح الأخطاء

  • إصلاح مشكلة requestFocus في صفحة خارج الشاشة تؤدي إلى تغيير الصفحة أصبح السلوك الآن متوافقًا مع ViewPager الأصلي. (b/140656866)
  • إصلاح مشكلة بقاء focus على صفحة خارج الشاشة بعد تغيير الصفحة تمت إزالة التركيز الآن عند تغيير الصفحة. (b/140656866)
  • تم إصلاح مشكلة ترتيب عمليات الإيقاف المؤقت / الاستئناف Fragment عند تغيير الصفحة (نوقف الآن العنصر الأساسي القديم مؤقتًا دائمًا قبل استئناف العنصر الجديد). (b/139489059)
  • إصلاح الخطأ في canScrollHorizontally(int) وcanScrollVertically(int): تعرض الدالتان الآن ما إذا كان بإمكان ViewPager2 التنقّل في الاتجاه المحدّد. (b/141848404)
  • تم إصلاح مشكلة في SwipeRefreshLayout لتعمل بشكل أفضل مع ViewPager2.

الإصدار ‎1.0.0-beta04

‫5 أيلول (سبتمبر) 2019

تم طرح androidx.viewpager2:viewpager2:1.0.0-beta04. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.

إصلاح الأخطاء

  • إصلاح مشكلة FragmentStateAdapter في حالات الاستخدام النادرة مع حزمة Fragment الأنشطة السابقة (b/139095195)
  • تم إصلاح مشكلة EditText التي تتسبب فيها بعض إعدادات السمات في حدوث تمرير سريع أو انتقال سريع إلى صفحة أخرى عند الكتابة أو التركيز. (b/138044582 وb/139432498)
  • إصلاح مشكلة في مثيلات ItemDecoration، وحلّ بديل لموضع مؤشر التمرير الزائد. (b/139012032)
  • تم إصلاح عدد من المشاكل في المكوّنات الأخرى لتعمل بشكل أفضل مع ViewPager2، وهي: RecyclerView وNestedScrollView وNavigation.

الإصدار 1.0.0-beta03

‫7 آب (أغسطس) 2019

تم طرح androidx.viewpager2:viewpager2:1.0.0-beta03. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.

إصلاح الأخطاء

  • حلّ مشكلة FragmentStateAdapter في حالة Fragment المؤقتة b/134246546
  • تم إصلاح المشاكل المتعلّقة بـ currentItem وscrollState عند تغيير مجموعة البيانات أثناء التمرير السلس (تمت معالجة الحالات الحدّية). b/137642608
  • تم إصلاح مشكلة تعارض الرسوم المتحركة PageTransformer (بما في ذلك MarginPageTransformer) مع الرسوم المتحركة لتغيير مجموعة البيانات. b/134658996
  • إصلاح مشكلة الرسوم المتحركة للتمرير السلس في مجموعات البيانات الكبيرة (الحد الأقصى لقيمة العدد الصحيح float). b/134858960

الإصدار ‎1.0.0-beta02

‫19 يوليو 2019

تم طرح androidx.viewpager2:viewpager2:1.0.0-beta02. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.

إصلاح الأخطاء

  • تمت إزالة تبعية jacoco غير المقصودة التي تم تقديمها في 1.0.0-beta01. (b/137782951)

الإصدار ‎1.0.0-beta01

17 تموز (يوليو) 2019

تم طرح androidx.viewpager2:viewpager2:1.0.0-beta01. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.

إصلاح الأخطاء

  • إصلاح مشكلة تعذُّر ViewPager2.updateCurrentItem أثناء التمرير وتعديل مجموعة البيانات
  • إصلاح عُطل NullPointerException المرتبط بـ ViewPager2.isLayoutRtl
  • TOUCH_SLOP_PAGING هو الآن ميل لمس تلقائي
  • تم إصلاح أحداث OnPageChangeCallback للمحوّلات الفارغة (الصفحة 0 بدلاً من -1 لتحقيق التكافؤ مع ViewPager1)

المشاكل المعروفة

الإصدار ‎1.0.0-alpha06

2 تموز (يوليو) 2019

تم طرح androidx.viewpager2:viewpager2:1.0.0-alpha06. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.

هذه هي آخر نسخة أولية مخطّط لها قبل إيقاف واجهة برمجة التطبيقات مؤقتًا والانتقال إلى الإصدار التجريبي، لذا يُرجى تزويدنا بملاحظاتك بشأن واجهة برمجة التطبيقات.

الميزات الجديدة

  • أسس تحسين إمكانية الوصول: ACTION_PAGE_RIGHT وACTION_PAGE_DOWN وما إلى ذلك

تغييرات واجهة برمجة التطبيقات

  • FragmentStateAdapter: يتم تحديد الحد الأقصى لعدد Fragment غير الأساسية بـ STARTED، ويتم ضبط قيمة menuVisibility على "خطأ".
  • PageTransformer، MarginPageTransformer، CompositePageTransformer: تم إصلاح مستندات position.

إصلاح الأخطاء

  • تم إصلاح الخطأ currentItem بعد تغيير مجموعة البيانات أو تغيير المحوّل.
  • تم حلّ المشكلة في MarginPageTransformer التي تتضمّن offscreenPageLimit.
  • تم إصلاح أخطاء في إجراءات تسهيل الاستخدام أثناء استخدام سلوك FakeDrag.

الإصدار ‎1.0.0-alpha05

‫5 يونيو 2019

تم طرح androidx.viewpager2:viewpager2:1.0.0-alpha05. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.

الميزات الجديدة

  • تم تقديم ItemDecorator بسلوك متوافق مع RecyclerView.
  • تمت إضافة MarginPageTransformer لتوفير إمكانية إنشاء مساحة بين الصفحات (خارج المساحة الداخلية للصفحة).
  • تم تقديم CompositePageTransformer لتوفير إمكانية الجمع بين عدة PageTransformer.

تغييرات واجهة برمجة التطبيقات

  • تمت إعادة تسمية الطريقة FragmentStateAdapter#getItem إلى FragmentStateAdapter#createFragment، إذ تبيّن أنّ اسم الطريقة السابق كان مصدرًا للأخطاء في الماضي.
  • تغيّرت قيمة OFFSCREEN_PAGE_LIMIT_DEFAULT من 0 إلى -1. لا حاجة إلى تغيير رمز العميل إذا تم استخدام OFFSCREEN_PAGE_LIMIT_DEFAULTالثابت.

إصلاح الأخطاء

  • تم تصحيح سلوك getCurrentItem() عند مقاطعة SCROLL_STATE_SETTLING بعملية سحب في الاتجاه المعاكس.
  • تمت معالجة مشاكل أداة تحميل الفئة FragmentStateAdapter في سياق "عدم الاحتفاظ بالأنشطة".
  • تم تحسين مستندات setOffscreenPageLimit.

الإصدار ‎1.0.0-alpha04

7 أيار (مايو) 2019

تم طرح androidx.viewpager2:viewpager2:1.0.0-alpha04. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.

الميزات الجديدة

  • offscreenPageLimit: تتيح التحكّم بشكل دقيق في عدد عناصر View / Fragment الصفحات التي يتم الاحتفاظ بها في هيكلية طرق العرض

تغييرات واجهة برمجة التطبيقات

  • لم تعُد السمتان orientation وisUserScrollable جزءًا من SavedState
  • تمت إزالة الطريقتَين saveState وrestoreState نهائيًا في FragmentStateAdapter
  • إخفاء التعليقات التوضيحية ViewPager2.Orientation وViewPager2.ScrollState

إصلاح الأخطاء

  • SavedState: تم إصلاح مشكلة في الاستعادة عند إيقاف Activity أو إعادة إنشائه
  • SavedState: تأخير عملية الاستعادة إلى حين ضبط المحوّل
  • OnPageChangeCallback: تم إصلاح الحالات القصوى البسيطة

الإصدار ‎1.0.0-alpha03

‫3 أبريل 2019

تم طرح androidx.viewpager2:viewpager2:1.0.0-alpha03. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.

الميزات الجديدة

  • إمكانية التمرير في ViewPager2 آليًا: fakeDragBy(offsetPx)

تغييرات واجهة برمجة التطبيقات

  • يتطلّب FragmentStateAdapter الآن كائن Lifecycle. تمت إضافة دالتَي إنشاء مساعدتَين للحصول على السمة من المضيف FragmentActivity أو المضيف Fragment.

إصلاح الأخطاء

  • إصلاحات عديدة متعلقة بتوافق Fragment:
    • التعامل مع تحديثات مجموعة البيانات أثناء تصغير التطبيق أو أثناء تدوير الشاشة
    • إزالة الأجزاء غير ذات الصلة بعد التدوير
    • إزالة الحالة المحفوظة للعناصر التي تمت إزالتها
  • PageChangeCallback: تم إصلاح عملية احتساب إزاحة الصفحة للصفحات التي تتضمّن هوامش.

الإصدار ‎1.0.0-alpha02

‫13 مارس 2019

تم طرح androidx.viewpager2:viewpager2:1.0.0-alpha02. يمكنك الاطّلاع على القائمة الكاملة للتعديلات في هذا الإصدار هنا.

الميزات الجديدة

  • إمكانية إيقاف بيانات أدخلها المستخدم (setUserInputEnabled، isUserInputEnabled)

تغييرات واجهة برمجة التطبيقات

  • ViewPager2 class final

إصلاح الأخطاء

  • FragmentStateAdapter إصلاحات الثبات

الإصدار ‎1.0.0-alpha01

‫7 فبراير 2019

تم طرح androidx.viewpager2:viewpager2 1.0.0-alpha01. هذا هو الإصدار الأول من ViewPager2.

الميزات الجديدة

  • مقارنةً بالإصدار السابق android.support.v4.view.ViewPager (VP1):
    • إتاحة التنسيق من اليمين إلى اليسار
    • التوافق مع الاتجاه العمودي
    • notifyDataSetChanged يعمل بكامل وظائفه (تم إصلاح الأخطاء في الإصدار 1 من المنتج)

تغييرات واجهة برمجة التطبيقات

  • يحلّ FragmentStateAdapter محلّ FragmentStatePagerAdapter
  • يحلّ RecyclerView.Adapter محلّ PagerAdapter
  • يحلّ registerOnPageChangeCallback محلّ addPageChangeListener

المشاكل المعروفة

  • clipToPadding
  • no fakeDrag
  • JavaDoc
  • التمرير المتداخل الموازي للاتجاه
  • لا يتوفّر عنصر تحكّم في الحدّ الأقصى لعدد الأجهزة التي يمكن تشغيل المحتوى عليها في الوقت نفسه
  • يجب تحسين عملية دمج TabLayout
  • no pageWidth setter (forced 100%/100%)
  • محوّل الصفحات: لا يمكن اختيار طبقة الأجهزة/البرامج، ولا يمكن عكس ترتيب الرسم
  • إبقاء العنصر الحالي مرئيًا عند إدراج صفحة قبل الصفحة الحالية
  • يجب تحسين التنقّل باستخدام لوحة المفاتيح
  • FragmentStateAdapter تحسينات على الثبات والأداء قادمة