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

حل مشكلة تضمين ScrollView في item من ListView في Android

 الحدود: في بعض الأحيان،يجب عرض عدد كبير من الحقول في item من ListView،ونظرًا لأهمية العرض،يُلزم أن يتم تعبئة item بنظام View لتجنب المشاكل في العرض،وتبدأ المشكلة،عندما يحتاج ListView إلى تنفيذ تفاعل النقر،يتم تمرير تفاعل النقر من قبل استخدام ScrollView المتداخل،إذن لا بد من إعادة كتابة ListView لتنفيذها.

/**
* 
* @author الكاتب: يي هوانغكسينغ
* 
* @da 2016/10/24 الوقت:
* 
* @toTODO وصف الفئة: حل مشكلة تضمين ScrollView في ListView، حيث يوقف ScrollView أحداث ضرب العناصر في ListView.
* 
* 
* عند تضمين ScrollView في listview، يتم العثور على أن التحرك العمودي والأفقي يعملان بشكل طبيعي، ولكن لا يمكن ضرب أي عنصر من قائمة listview. تم حل المشكلة بعد البحث في ميكانيكية توزيع Android، بإنشاء توريث Listview وإعادة كتابة onInterceptTouchEvent لـ Listview.
* 
* دائمًا يتم استدعاء onTouchEvent الخاص بلـ listview في onInterceptTouchEvent لضمان تنفيذ جميع أحداث listview.
* super.onInterceptTouchEvent(ev) لن يوقف النقل العمودي المطلوب لـ ScrollView.
*/
public class MyListView extends ListView {
private int flag = 0;
private float StartX;
private float StartY;
public MyListView(Context context) {
super(context);
// TODO تم إنشاء الباني تلقائيًا
}
public MyListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO تم إنشاء الباني تلقائيًا
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO تم إنشاء الباني تلقائيًا
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// دائمًا يتم استدعاء معالج أحداث اللمس الخاص بلـ listview
onTouchEvent(ev);
إذا (ev.getAction() == MotionEvent.ACTION_DOWN) {
StartX = ev.getX();
StartY = ev.getY();
return false;
}
if (ev.getAction() == MotionEvent.ACTION_MOVE) {
float ScollX = ev.getX() - StartX;
float ScollY = ev.getY() - StartY;
// تحديد هل هو سحب أفقي أم عمودي، إذا كان سحب عمودي، فحجب أحداث السحب والمسار (إذا لم يتم حجبها، فإن listview وscrollview سيقومان بسحب في نفس الوقت مما يؤدي إلى تقطيع السحب)
if (Math.abs(ScollX) < Math.abs(ScollY)) {
flag = 1;
return true;
}
return false;
}
if (ev.getAction() == MotionEvent.ACTION_UP) {
if (flag == 1) {
return true;
}
return false;
}
return super.onInterceptTouchEvent(ev);
}
}

ما ذكرته أعلاه هو حل مشكلة تضمين ScrollView في item ListView التي قدمته لكم محرر الموقع، آمل أن يكون مفيدًا لكم، إذا كان لديكم أي استفسارات، فلا تترددوا في ترك تعليق، وسأقوم بالرد على استفساراتكم في أقرب وقت. وأشكركم أيضًا على دعمكم لموقع呐喊 لتعليم البرمجة!

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

أنت قد تعجبك