2013-05-14 1 views
0

ListView가 있고 다음 코드를 사용하여 내 BaseAdapter의 getView() 프로세스를 확인합니다.ListView adapter getView() 잘못된 항목 가져 오기

내가 목록을 천천히 내려다 보면 나는 이상한 일이 있음을 발견했다. 목록 위치가 40-50ish인데도 getView()가 0-7 위치로 호출됩니다. 여기 내 로그 모습입니다 : 당신이 볼 수 있듯이 행 (45) 사이에,

05-14 11:46:13.989: I/getView()(18681): Fetching Row: 45 
05-14 11:46:14.039: I/getView()(18681): Fetching Row: 0 
05-14 11:46:14.049: I/getView()(18681): Fetching Row: 1 
05-14 11:46:14.049: I/getView()(18681): Fetching Row: 2 
05-14 11:46:14.049: I/getView()(18681): Fetching Row: 3 
05-14 11:46:14.059: I/getView()(18681): Fetching Row: 4 
05-14 11:46:14.059: I/getView()(18681): Fetching Row: 5 
05-14 11:46:14.059: I/getView()(18681): Fetching Row: 6 
05-14 11:46:14.069: I/getView()(18681): Fetching Row: 7 
05-14 11:46:14.320: I/getView()(18681): Fetching Row: 46 
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 0 
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 1 
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 2 
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 3 
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 4 
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 5 
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 6 
05-14 11:46:14.430: I/getView()(18681): Fetching Row: 7 

및 46 행, 각 시간, 행 0-7 용)의 getView (라고. 이것은 모든 목록 항목에 대해 발생합니다. 이 문제가 성능 문제를 일으키는 것 같습니다.

왜 이런 일이 발생합니까? 그리고이 정상적인 행동입니까?

답변

5

android:layout_height="match_parent"

+1

와우에 layout_height를 변경합니다. 해결책을 가져 주셔서 감사합니다! 왜 android : layout_height = "wrap_content"를 설정하면 목록보기가 그렇게하는 지 알 수 있습니까? – baekacaek

+3

레이아웃이 wrap_content 때문에 매회 다시 계산됩니다. –

+0

오 ~ 알았어. 다시 한 번 감사합니다 – baekacaek

1

이것은 정상적인 동작입니다. ListView에는 실제로 성능을 향상시키기위한 여러 가지 내부 최적화가 있습니다. 그 중 하나는보기를 재활용하고 화면에 실제로 표시된 행만 표시하는 것입니다. 즉, ListView은 어댑터에서 x 개의 뷰를 모두 렌더링 한 다음 화면에서 단순히 화면을 이동하거나 화면 밖으로 이동하여 작동하지 않습니다. 오히려 표시되는대로보기를 작성합니다. 이것이 목록의 항목 45에있을 때 항목 0에서 7까지의 해당 행을 여전히 참조하는 이유입니다. ListView은 한 번에 7 또는 8 개의보기 만 표시합니다 (예 : 화면에 맞는 내용). 더 많은. 이것은 장치가 모든 뷰를 미리 렌더링하지 않아도되므로 목록이 길어질수록 큰 차이를 만듭니다.

보기의 하나를 얻는 결과는 getView()을 사용하는 것보다 약간 더 복잡합니다. 목록의 길이에 따라 존재하지 않을 가능성이 있기 때문입니다. 이 간단한 것이 었습니다 생각하지 못했습니다 귀하의 목록보기 XML의

관련 문제