شرح - Android ListView مع تخطيطات مختلفة لكل صف
listview in listview android (4)
أعرف كيفية إنشاء محول صف صف مخصص + مخصص لدعم صف مخصص لعرض القائمة بالكامل. ولكن كيف يمكن لواحد من listview دعم العديد من أنماط الصفوف المختلفة؟
أنت تعرف بالفعل الأساسيات. تحتاج فقط إلى الحصول على محول مخصص لعرض تخطيط / عرض مختلف استنادًا إلى معلومات الصف / المؤشر التي يتم توفيرها.
يمكن لـ ListView
دعم أنماط صف متعددة لأنه مشتق من AdapterView :
يعد AdapterViewView طريقة عرض يتم تحديد أطفالهم بواسطة مهايئ.
إذا نظرت إلى Adapter ، فستشاهد طرقًا تستخدم حساب طرق عرض خاصة بالصف:
abstract int getViewTypeCount()
// Returns the number of types of Views that will be created ...
abstract int getItemViewType(int position)
// Get the type of View that will be created ...
abstract View getView(int position, View convertView, ViewGroup parent)
// Get a View that displays the data ...
تقدم الطريقتان الأخيرتان الموضع بحيث يمكنك استخدام ذلك لتحديد نوع العرض الذي يجب أن تستخدمه لهذا الصف .
وبالطبع ، لا تستخدم بشكل عام برنامج المحول والمحول Adapter ، بل تستخدم أو تستمد من إحدى الفئات الفرعية الخاصة بها. قد تضيف الفئات الفرعية للمحول وظائف إضافية لتغيير كيفية الحصول على تخطيطات مخصصة لصفوف مختلفة. نظرًا لأن طريقة العرض المستخدمة لصف معين يتم تشغيلها بواسطة المهايئ ، فإن الخدعة تكمن في الحصول على المحوّل لإرجاع العرض المرغوب لصف معين. كيفية القيام بذلك يختلف اعتمادا على محول معين.
على سبيل المثال ، لاستخدام ArrayAdapter ،
- تجاوز
getView()
لتضخيم ، ملء ، وإرجاع العرض المطلوب لموقف معين. تتضمن طريقةgetView()
فرصة لإعادة استخدام المشاهدات عبر المعلمةconvertView
.
ولكن لاستخدام مشتقات CursorAdapter ،
- تجاوز
newView()
لتضخيمnewView()
وإرجاع العرض المرغوب لحالة المؤشر الحالية (أي "الصف" الحالي) [تحتاج أيضًا إلى تجاوزbindView
حتى تتمكن الأداة من إعادة استخدام المشاهدات]
ومع ذلك ، لاستخدام SimpleCursorAdapter ،
- تعريف
SimpleCursorAdapter.ViewBinder
مع أسلوبsetViewValue()
لتضخيم ،setViewValue()
، وإرجاع العرض المطلوب لصف معين (الدولة المؤشر الحالية) و "عمود" البيانات. يمكن أن تحدد الطريقة فقط وجهات النظر "الخاصة" وتؤجل السلوك القياسي ل SimpleCursorAdapter لربط "طبيعي".
ابحث عن الأمثلة / البرامج التعليمية المحددة لنوع المحول الذي تستخدمه في النهاية.
أحاول تحديد أفضل طريقة للحصول على ListView واحد يحتوي على تخطيطات مختلفة لكل صف. أعرف كيفية إنشاء محول صف صف مخصص + مخصص لدعم صف مخصص لعرض القائمة بالكامل ، ولكن كيف يمكنني تنفيذ العديد من أنماط الصفوف المختلفة في ListView؟
إذا احتجنا إلى إظهار نوع عرض مختلف في عرض القائمة ، فمن الجيد استخدام getViewTypeCount () و getItemViewType () في المهايئ بدلاً من تبديل العرض. VIEW.GONE و VIEW.VISIBLE يمكن أن تكون مهمة مكلفة جدًا داخل getView () والتي يؤثر على قائمة التمرير.
الرجاء التحقق من هذا واحد لاستخدام getViewTypeCount () و getItemViewType () في محول.
الرابط: the-use-of-getviewtypecount
في محول الصفيف المخصص الخاص بك ، يمكنك تجاوز أسلوب getView () ، كما هو معتاد على دراية. ثم كل ما عليك فعله هو استخدام عبارة switch أو عبارة if لإرجاع عرض مخصص معين بناءً على وسيطة الموضع التي تم تمريرها إلى أسلوب getView. إن Android ذكي في أنه سيعطيك فقط ميزة convertView من النوع المناسب لموضعك / صفك ؛ لا تحتاج إلى التحقق من أنها من النوع الصحيح. يمكنك مساعدة Android في ذلك عن طريق تجاوز getItemViewType () وطرق getViewTypeCount () بشكل مناسب.
كان ListView مخصصًا لحالات الاستخدام البسيط مثل العرض الثابت نفسه لجميع عناصر الصفوف.
نظرًا لأنك تحتاج إلى إنشاء ViewHolders واستخدام كبير لـ getItemViewType()
وعرض ديناميكيًا مختلفًا لصف xml الخاص بتخطيط الصفوف ، يجب أن تحاول القيام بذلك باستخدام RecyclerView ، والذي يتوفر في واجهة برمجة تطبيقات Android 22. يوفر دعمًا وبنية أفضل للعرض المتعدد أنواع.
تحقق من هذا tutorial حول كيفية استخدام RecyclerView للقيام بما تبحث عنه.