تحميل البيانات بشكلٍ بطيء باستخدام القوائم وميزة "التنقّل في الصفحة"

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

توافق الإصدار

يتطلّب هذا التنفيذ ضبط الحد الأدنى من إصدار حزمة SDK لمشروعك على المستوى 21 من واجهة برمجة التطبيقات أو إصدار أحدث.

التبعيات

عرض محتوى مُقسَّم إلى صفحات

باستخدام مكتبة Paging، يمكنك تحميل صفحات البيانات وعرضها من مجموعة بيانات أكبر تم الحصول عليها من مساحة التخزين المحلية أو عبر شبكة. استخدِم الرمز البرمجي التالي لمحاولة عرض قائمة مفصّلة تعرض شريط تقدّم للإشارة إلى المستخدم بأنّه تتم محاولة retrieving more data:

@Composable
fun MessageList(
    modifier: Modifier,
    pager: Pager<Int, Message>
) {
    val lazyPagingItems = pager.flow.collectAsLazyPagingItems()

    LazyColumn {
        items(
            lazyPagingItems.itemCount,
            key = lazyPagingItems.itemKey { it.id }
        ) { index ->
            val message = lazyPagingItems[index]
            if (message != null) {
                MessageRow(message)
            } else {
                MessagePlaceholder()
            }
        }
    }
    @Composable
    fun MessagePlaceholder(modifier: Modifier) {
        Box(
            Modifier
                .fillMaxWidth()
                .height(48.dp)
        ) {
            CircularProgressIndicator()
        }
    }

    @Composable
    fun MessageRow(
        modifier: Modifier,
        message: Message
    ) {
        Card(modifier = Modifier.padding(8.dp)) {
            Column(
                modifier = Modifier.padding(8.dp),
                verticalArrangement = Arrangement.Center
            ) {
                Text(message.sender)
                Text(message.text)
            }
        }
    }
}

النقاط الرئيسية حول الرمز

  • LazyColumn: يتم استخدام هذا المكوّن القابل للتجميع لعرض قائمة كبيرة من العناصر (الرسائل) بكفاءة. ولا يعرض سوى العناصر الظاهرة على الشاشة، ما يوفر الموارد والذاكرة.
  • يدير عنصر lazyPagingItems بفعالية تحميل البيانات المفصّلة ضمن LazyColumn وعرضها. ويُرسِل LazyPagingItems إلى items في العنصر القابل للتجميع LazyColumn.
  • MessageRow(message: Text) مسؤول عن عرض عناصر الرسائل الفردية، ومن المحتمل أن يعرض المُرسِل ونص الرسالة ضمن بطاقة.
  • MessagePlaceholder() يوفّر عنصر نائبًا مرئيًا (مؤشر سريان العمل) أثناء جلب بيانات الرسالة الفعلية، ما يُحسِّن تجربة المستخدم.

النتائج

يعرض الفيديو التالي السلوك الناتج عن قائمة كبيرة تُجلب البيانات أثناء تنقّل المستخدم.

المجموعات التي تتضمّن هذا الدليل

هذا الدليل هو جزء من مجموعات الأدلة السريعة المنظَّمة التي تتناول أهداف تطوير Android الأوسع نطاقًا:

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

إذا كانت لديك أسئلة أو ملاحظات

يمكنك الانتقال إلى صفحة الأسئلة الشائعة والاطّلاع على الأدلة السريعة أو التواصل معنا وإعلامنا برأيك.