English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

طريقة سريعة لحل مشكلة عدم الاستجابة للنقر في ListView في Android

في عملية التطوير العادية، قد لا تكون ListView لدينا مجرد عرض نص أو زر بسيط، بل أكثر تعقيدًا في العرض، وفي هذه الحالة، نحتاج إلى كتابة التصميم والمدخلات المخصصة، عادةً بالإرث من BaseAdapter، مثال الكود في الأسفل. عند كتابة الحدث النقر في ListView، إذا لم يتم تنفيذ OnItemClickListener أو onItemClick، فإن حدث نقر Item في ListView يتعطل، بينما يمكن معالجة حدث النقر في View من خلال getView. السبب الرئيسي في انعدام استجابة Item النقر كله عادةً هو وجود مثل ImageButtons، Buttons، CheckBoxes وغيرها من وحدات التحكم الفرعية (يمكن أن تكون أيضًا فرعية من Button أو Checkable) في Item الخاص بك، حيث ستحصل هذه الوحدات الفرعية على التركيز، لذا غالبًا ما تتغير هذه الوحدات الفرعية عند النقر على item، بينما لا يستجيب item نفسه.

في هذه الحالة، يمكن استخدام descendantFocusability لحل المشكلة، حيث أن خاصية descendantFocusability لها ثلاثة أنواع من الخاصيات

هذه الخاصية تعرف العلاقة بين ViewGroup ووحدات التحكم الفرعية عندما يتم تخصيص تركيز الوحدة

للعينة هناك ثلاثة أنواع من القيم

beforeDescendants:.ViewGroup تحصل على التركيز قبل الوحدات الفرعية للعناصر المختلفة

afterDescendants:.ViewGroup تحصل على التركيز فقط عندما لا تحتاج الوحدات الفرعية للعناصر المختلفة إلى التركيز

blocksDescendants: تغطي.ViewGroup الوحدات الفرعية للعناصر المختلفة وتحصل على التركيز مباشرة

عادة ما نستخدم النوع الثالث، وهو إضافة الخاصيةandroid:descendantFocusability=”blocksDescendants” إلى جذور Item Layout.
الوضع الذي واجهته هو أن هناكImageButton في Item Layout، لأن هذه المكونة لديها قدرة على الاستيلاء على الحدث قوية، تقريبًا مثلbutton الجذر؛ لذا، عند تشغيله، يصبح النقر على listItem غير فعال. استخدم الطريقة أعلاه لحل المشكلة؛ بالطبع، يمكنك أيضًا تغييرImageButton إلىimageView لحل هذه المشكلة أيضًا.

البيان: محتويات هذا المقال تم جمعها من الإنترنت، ويتمتع صاحب الحقوق الأصلية، والمحتوى يتم تقديمه من قبل مستخدمي الإنترنت بتحميله من تلقاء نفسه، ولا يمتلك هذا الموقع حقوق الملكية، ولا يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا اكتشفت أن هناك محتوى يشتبه في انتهاك حقوق النسخ، فالرجاء إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) للإبلاغ، وتقديم الأدلة ذات الصلة، وسيتم حذف المحتوى المزعوم الذي يشتبه في انتهاك حقوق النسخ فورًا.

الذوق الخاص بك