كيف أقوم بإنشاء ListView غير موجود في التنظيف، أو هل تم تعطيل ملف التمرير؟

StackOverflow https://stackoverflow.com/questions/2419246

  •  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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top