2016-08-26 3 views
3

몇 가지 기사를 읽었으며 video이 어떻게 작동하는지 이해하기 위해 ListView이 작동하는지 확인했습니다. 예를 들어 5 개 항목 (모든 항목이 화면에 표시됨) 목록이 있다고 가정 해 봅시다. 단지 0에 대한android getView()는 BaseAdapter에서 어떻게 작동합니까?

08-26 14:52:40.882: item position: 0 view null 
08-26 14:52:40.883: item position: 1 view android.widget.RelativeLayout{ab5ffdd V.E...C.. ......I. 0,0-0,0 #7f0e00b8 app:id/item_container} 
08-26 14:52:40.883: item position: 2 view android.widget.RelativeLayout{ab5ffdd V.E...C.. ......I. 0,0-0,0 #7f0e00b8 app:id/item_container} 
08-26 14:52:40.884: item position: 3 view android.widget.RelativeLayout{ab5ffdd V.E...C.. ......I. 0,0-0,0 #7f0e00b8 app:id/item_container} 
08-26 14:52:40.884: item position: 4 view android.widget.RelativeLayout{ab5ffdd V.E...C.. ......I. 0,0-0,0 #7f0e00b8 app:id/item_container} 
08-26 14:52:40.884: item position: 0 view android.widget.RelativeLayout{ab5ffdd V.E...C.. ......I. 0,0-0,0 #7f0e00b8 app:id/item_container} 
08-26 14:52:40.884: item position: 1 view android.widget.RelativeLayout{ab5ffdd V.E...C.. ......I. 0,0-0,0 #7f0e00b8 app:id/item_container} 
08-26 14:52:40.884: item position: 2 view android.widget.RelativeLayout{ab5ffdd V.E...C.. ......I. 0,0-0,0 #7f0e00b8 app:id/item_container} 
08-26 14:52:40.884: item position: 3 view android.widget.RelativeLayout{ab5ffdd V.E...C.. ......I. 0,0-0,0 #7f0e00b8 app:id/item_container} 
08-26 14:52:40.884: item position: 4 view android.widget.RelativeLayout{ab5ffdd V.E...C.. ......I. 0,0-0,0 #7f0e00b8 app:id/item_container} 
08-26 14:52:40.884: item position: 0 view android.widget.RelativeLayout{88bc756 V.E...C.. ......I. 0,0-1080,65 #7f0e00b8 app:id/item_container} 
08-26 14:52:40.884: item position: 1 view android.widget.RelativeLayout{1264e60 V.E...C.. ......I. 0,68-1080,133 #7f0e00b8 app:id/item_container} 
08-26 14:52:40.884: item position: 2 view android.widget.RelativeLayout{36b089 V.E...C.. ......I. 0,136-1080,201 #7f0e00b8 app:id/item_container} 
08-26 14:52:40.884: item position: 3 view android.widget.RelativeLayout{e1a12bb V.E...C.. ......I. 0,204-1080,269 #7f0e00b8 app:id/item_container} 
08-26 14:52:40.885: item position: 4 view android.widget.RelativeLayout{ab5ffdd V.E...C.. ......I. 0,0-0,0 #7f0e00b8 app:id/item_container} 

I getView()viewnull : 내가 콘솔에서 다음과 같은 출력을 볼이 코드를 실행하면

@Override 
public View getView(int position, View view, ViewGroup parent) { 
    System.out.println("item position: " + position + " view " + view); 

    if (view == null) 
    { 
     view = LayoutInflater.from(context).inflate(R.layout.list_view_item, null); 
    } 
    return view; 
} 

: 나는 BaseAdapter에서 상속 내 사용자 지정 어댑터에 다음 코드를 위치. 보고 난 후 첫 번째 5 개의 호출에 대해 null이 있다고 가정합니다 (모든 보이는 항목보기가 초기화되지 않을 때까지). 왜 처음 만? 내가 누락 된 것?

+0

귀하의 list_view_item 코드를 게시 할 수 있습니까 – Ashish

+0

제 환경에서는보기가 모두 null입니다. 전체 레이아웃 및 어댑터 코드를 게시 할 수 있습니까? – nshmura

답변

0

이것은 뷰의 팩토리 메소드입니다. 복잡한 뷰를 반복해서 생성하는 것을 방지하기 위해 생성 된 뷰를 반환하고 나중에 프레임 작업에 의해 매개 변수로 받아 들일 수 있습니다.

당신은보기를 재사용 할 수 있는지 확인해야합니다 (예 : 다른 유형의 시각화가있는 경우 유형이 일치 함). 새보기를 작성하는 대신 성능상의 이유로 뷰를 사용하십시오 하나).

확대보기 인플레이션에는 XML 구문 분석이 포함됩니다. 값 비싼 작업입니다. API를 통해 구성 요소를 재사용 할 수있는 이유가 여기 있습니다. UI 개발에 대한 일반적인 패턴입니다.

첫 번째 호출에서는 null이고 이후에는 뷰의 인스턴스에서 null이 발생합니다.

1

ListView보기를 재생하므로 처음 실행하면보기가 부 풀릴 수 있으므로 null이됩니다. 보기를 펼치면 동일한보기를 재사용하고 내용을 업데이트하여 성능을 향상시켜야합니다. 다음 비디오 https://www.youtube.com/watch?v=wDBM6wVEO70을 보면서 목록보기의 작동 방식을 설명하는 것이 좋습니다.

+0

이 비디오는 정말 유용합니다. 하지만 getView()가 어떻게 작동하는지 (호출되는 빈도와 빈도)에 대한 답을 찾지 못했습니다. 내가 얻은 모든 것 :'getView()'는 내부 순환 알고리즘에 따라 호출되지만 작동 방법에 대한 메모는 없습니다. 나는 그것이 바뀔지도 모르지만 적어도 대략적인 스키마를 알고 싶습니다. – Natasha

+0

글쎄, getView()는 화면에 보이는 각 뷰에 대해 호출 될 것입니다. 중단 점을 추가하고 해당 동작을 볼 수 있습니다. 재활용 알고리즘이 어떻게 작동하는지 정확히 이해하려면 소스 코드로 이동하는 것이 좋습니다. –