ScrollView에 있지 않거나 ScrollView가 비활성화 된 ListView를 어떻게 작성합니까?
-
19-09-2019 - |
문제
ListAdapter와 항목 선택 등을 사용하는 것과 같은 ListView의 일부 제품을 원하지만 스크롤 뷰 부분을 원하지 않습니다. 나는 다른 방식으로 그 부분을 직접 구현하고 싶습니다 (왜 또는 어떻게하는지, 이것이 실제로이 질문의 요점이 아니므로 "왜"묻지 마십시오).
스크롤 뷰에 있지 않거나 스크롤이 비활성화 된 목록보기가있는 방법이 있습니까?
해결책
ㅏ ListView
a ScrollView
. ㅏ ListView
도구 적으로 스크롤합니다. 간단한 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);