كيف أقوم بإنشاء ListView غير موجود في التنظيف، أو هل تم تعطيل ملف التمرير؟
-
19-09-2019 - |
سؤال
أريد بعض الأشياء الجيدة في قائمة ListView، مثل القدرة على استخدام ListAdapter، واختيار العنصر، إلخ، لكنني لا أريد جزء التمرير منه. أريد أن أقوم بتنفيذ هذا الجزء نفسي، بطريقة مختلفة (لماذا أو كيف أفعل ذلك ليس حقا نقطة هذا السؤال، لذا يرجى عدم طرح "لماذا").
هل هناك طريقة للحصول على ListView غير موجود في التمرير أو هل تم تعطيل التمرير؟
المحلول
أ ListView
ليس في ScrollView
. وبعد أ ListView
هل التمرير instrsincally. لا أعتقد أنك تستطيع تعطيل التمرير من خلال API بسيطة. إذا كان الأمر كذلك، فإن اختياراتك إما إلى الفئة الفرعية ListView
وحاول إيجاد طرق لتجاوز سلوكيات التمرير، استنساخ ListView
والقضاء على سلوكيات التمرير، أو اكتب بنفسك AdapterView
أن يجعل الأشياء بالطريقة التي تريدها.
نصائح أخرى
طريقة أخرى للقيام بذلك هي لف ListView
في أي محلول التمرير المخصص الذي قمت بتحريره. إذا قمت ببساطة بتعيين ارتفاع ListView
أن تكون بالضبط عالية مثل جميع الصفوف (باستخدام عرض القائمة LayoutParams
)، ثم سوف يتصرف مثل وجهة نظر طبيعية ولن تكون قادرة على التمرير؛ لذلك يمكنك إضافته إلى عرض التمرير آخر. الصعوبة في هذه الطريقة هي أن عليك معرفة ارتفاع قائمتك في وقت مبكر، لذلك عليك معرفة ارتفاع كل صف. أيضا، سيؤدي ذلك إلى إنشاء جميع الصفوف في وقت واحد، وبالتالي لن تتمكن من الاستفادة من ميزة إعادة تدوير العرض.
إذا لم يكن لديك طريقة سهلة لحساب الارتفاع في وقت مبكر، فيمكنك خداع ListView
في القيام بذلك من أجلك عن طريق تجاوز onMeasure
وإعطائها ارتفاع المواصفات الخاصة بك:
// Calculate height of the entire list by providing a very large
// height hint. But do not use the highest 2 bits of this integer;
// those are reserved for the MeasureSpec mode.
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);