في هذا السيناريو، يتم تنفيذ ViewPager المكون من ستة أجزاء داخل النشاط. يتم تعطيل التمرير بين الأجزاء، لذلك يتم استخدام زر لتغيير الجزء الحالي. يتم إرسال طلب GET إلى الخادم ويتم عرض بيانات الاستجابة في كل جزء بعد اكتمال السحب.
النهج الأول (باستخدام setUserVisibleHint)
في البداية، تم استخدام طريقة setUserVisibleHint لتشغيل طلب GET عندما يصبح الجزء مرئيًا. ومع ذلك، أدى هذا الأسلوب إلى تأخير في الرسوم المتحركة التمرير بسبب التنفيذ الفوري للطلب.
الطريقة الثانية (باستخدام OnPageChangeListener)
للتغلب على تأخر الرسوم المتحركة ، تمت إضافة OnPageChangeListener إلى ViewPager. يتتبع هذا المستمع حالة تمرير الصفحة ويرسل طلب GET عندما يكون الجزء المطلوب مرئيًا بالكامل (أي، حالة التمرير تساوي IDLE).المشكلة والحل
عملت الطريقة الثانية بشكل جيد، ولكن حدث NullPointerException عند تنفيذ sendGetRequest(). كان هذا بسبب عدم الحصول على مرجع الجزء بشكل صحيح. لحل هذه المشكلة، كان من الضروري تخزين المراجع إلى الأجزاء في أسلوب InstantiateItem الخاص بـ FragmentPagerAdapter. بعد ذلك، داخل OnPageChangeListener، بدلاً من إنشاء جزء جديد، يمكن استخدام الجزء المشار إليه من ViewPagerPagerAdapter.
كود محدث لـ ViewPager2 (Kotlin)
viewPager.registerOnPageChangeCallback(
object: ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
val frag: Fragment = mAdapter.fragments[position]
if (frag != null && frag is FragmentTwo) {
(frag as FragmentTwo).sendGetRequest()
}
}
}
)
هنا، يشير mAdapter إلى FragmentPagerAdapter المستخدم داخل ViewPager2. تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3