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. أخبرنا إذا اكتشفت مشكلات جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مكتبة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية عن طريق النقر على زر النجمة.
اطّلِع على مستندات أداة تتبُّع المشاكل لمزيد من المعلومات.
الإصدار 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
بشكل صحيح، علمًا بأنّ RecyclerView1.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 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة وظائف الاستدعاء لحفظ حالة المقتطف إلى
FragmentTransactionCallback
. (I45b90) - لم تعُد
ViewPager2
تحاول إصلاح إرسالWindowInsets
المعطّل لإصدارات واجهة برمجة التطبيقات القديمة (< 30)، لأنّ الإصلاح نفسه قد يكون ضارًا لأشقاءViewPager2
. لا يزال الإصلاح متاحًا، ولكن أصبح إجراءً اختياريًا حتى يتمكّن المطوّرون من اتخاذ القرار بناءً على كل حالة على حدة. يمكنك تفعيل الحلّ من خلال الاتصال علىWindowInsetsApplier.install(viewPager2))
. (Ic9a85)
إصلاح الأخطاء
- يجب حلّ مشاكل التوافق مع الإصدارات الأحدث من "
RecyclerView
". على مستخدمي هذا الإصدار منViewPager2
الترقية إلى الإصدارRecyclerView
1.3.1-rc01 على الأقل.
الإصدار 1.1.0-beta01
4 آب (أغسطس) 2021
تم إصدار androidx.viewpager2:viewpager2:1.1.0-beta01
. يحتوي الإصدار 1.1.0-beta01 على هذه المراجعات.
التغييرات في واجهة برمجة التطبيقات
ترقية حزمة androidx لاستخدام Kotlin 1.4 (Id6471 وb/165307851 وb/165300826)
الانتقال إلى استهداف Java 8 لجميع مكتبات 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
. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.
إصلاح الأخطاء
- تمت إزالة الاعتمادية غير المقصودة التي تم إجراؤها في
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
على false.PageTransformer
،MarginPageTransformer
،CompositePageTransformer
: مستندات عنposition
تم إصلاحها
إصلاح الأخطاء
currentItem
بعد حلّ مشكلة تغيير مجموعة البيانات أو المحوِّل- تم حلّ المشكلة
offscreenPageLimit
فيMarginPageTransformer
. - تم إصلاح إجراءات تسهيل الاستخدام أثناء العمل في سلوك
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 نهائية
إصلاح الأخطاء
FragmentStateAdapter
إصلاحات للثبات
الإصدار 1.0.0-alpha01
7 شباط (فبراير) 2019
تم طرح androidx.viewpager2:viewpager2 1.0.0-alpha01
. هذا هو الإصدار الأول من ViewPager2.
الميزات الجديدة
- مقارنةً بالإصدار السابق
android.support.v4.view.ViewPager
(VP1):- إتاحة التنسيق من اليمين إلى اليسار
- دعم الاتجاه العمودي
notifyDataSetChanged
تعمل بشكل كامل (تم حلّ أخطاء VP1)
تغييرات واجهة برمجة التطبيقات
FragmentStateAdapter
يحل محلFragmentStatePagerAdapter
RecyclerView.Adapter
يحلّ محلّPagerAdapter
registerOnPageChangeCallback
يحلّ محلّaddPageChangeListener
المشاكل المعروفة
- clipToPadding
- no fakeDrag
- JavaDoc
- التمرير المُدمَج بشكل موازٍ للاتجاه
- لا يمكن التحكّم في الحد الأقصى للمحتوى الذي يظهر خارج الشاشة.
- يجب دمج TabLayout بشكل أفضل
- لا يتوفّر مُعدِّل لعرض الصفحة (يتم فرض 100%/100%)
- محوِّل الصفحة: لا يتوفّر خيار لطبقة الأجهزة/البرامج، ولا يتوفّر ترتيب رسم عكسي
- إبقاء العنصر الحالي مرئيًا عند إدراج صفحة قبل العنصر الحالي
- يجب تحسين ميزة التنقّل باستخدام لوحة المفاتيح
- سيتم إدخال
FragmentStateAdapter
تحسينات على الثبات والأداء