تكرار السؤال: …
الإجابة المختصرة
بتوفير key ثابت وفريد لكل عنصر، وتحديد contentType، والابتعاد عن العمليات الحسابية داخل العناصر أثناء التمرير.
الشرح
عند غياب الـ key، يعتمد Compose على موضع العنصر (Position) في القائمة، فإذا حُذف عنصر من البداية، يعاد تكوين القائمة بأكملها وتضيع حالات الرسوم المتحركة وعناصر التمرير. توفير key فريد يسمح لـ Compose بتتبع العناصر وتحريكها بكفاءة، بينما يساعد contentType مجمع العناصر على إعادة استخدام التكوين المشابه كما في نمط ViewType القديم.
مثال بالكود
LazyColumn {
items(
items = messages,
key = { message -> message.id }, // مفتاح فريد وثابت
contentType = { message -> message.type } // تصنيف نوع العنصر
) { message ->
MessageItem(message)
}
}أخطاء شائعة
- استخدام مؤشر القائمة (index) كـ key، مما يلغي فائدة تتبع العناصر عند الإضافة أو الحذف.
- تضمين كائنات قابلة للتعديل وغير مستقرة (مثل Unstable Lists) كمعاملات لعناصر القائمة مما يمنع skipping.