2013-08-28 1 views
1

"holder"에 대한 안드로이드에 대한 정보를 찾고 있습니다 ... gridview에서 확인란을 사용하는 코드를 보았 기 때문에 ...하지만 기본을 찾을 수 없었습니다. 그것에 관한 정보. 아무도 나를 도울 수 있으면 행복 할거야. ViewHolder 여기리스트 스크롤의 성능을 개선하는 데 사용됩니다android에있는 홀더에 대한 기본 정보

public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder; 
      if (convertView == null) { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(
         R.layout.galleryitem, null); 
       holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage); 
       holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox); 

       convertView.setTag(holder); 
      } 
      else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      holder.checkbox.setId(position); 
      holder.imageview.setId(position); 

답변

0

ListView 스크롤하는 동안 코드가 자주 findViewById()으로 호출되어 성능이 저하 될 수 있습니다. 어댑터가 재활용을 위해 팽창 된 뷰를 반환하는 경우에도 요소를 찾아보고 업데이트해야합니다. findViewById()을 반복적으로 사용하는 방법은 "보기 홀더"디자인 패턴을 사용하는 것입니다.

ViewHolder 개체는 Layout의 태그 필드 안에 각 구성 요소보기를 저장하므로 반복적으로 조회하지 않고도 즉시 액세스 할 수 있습니다. 더 많은 정보 refer here

0

: 여기 홀더를 사용하는 코드의 일부이다.

다음은 Android Developer Website에서 추출한 흥미로운 정보입니다. ViewHolder를 사용

0

는 모든의 getView() 메소드에서 findViewById를()를 호출하는 방지 할 수 있도록 안드로이드에서

0

, 목록보기 사용 변환보기 더 나은 성능을 얻을, 그것은 볼 때마다 생성 방지와 목록 항목의보기를 다시 사용합니다 뷰 홀더는 변환 뷰에서 하위 뷰 참조를 유지하는 데 사용됩니다. 자세한 내용은 listview 소스 코드를 참조하십시오. 감사합니다.

0

ViewHolder를 들어

모든 전화에서 실행되는 고가의 호출을 방지하기 위해 사용된다. 나는 각각의 객체에 대한 참조를 findViewById() 메서드로 수정하는 것을 참조한다. 레이아웃 내에서 객체 트리의 특정 컨트롤 ID를 검색하는 것은 레이아웃 자체의 복잡성에 따라 비용이 많이들 수 있습니다.

ViewHolder 패턴으로 컨트롤에 대한 참조를 저장할 수 있으므로 다시 검색 할 필요가 없습니다.클래스에는 레이아웃을 처리해야하는 각 컨트롤에 대한 참조가 포함됩니다 :

static class ViewHolder { 
    ImageView imageview; 
    Checkbox checkbox; 
} 

우리는 setTag()로, 안드로이드의 모든 컨트롤에 표시되는 태그의 속성에 대한 참조와 함께 홀더에 저장됩니다, 우리는 getTag()과를 얻을 수 있습니다.

0

다음 링크는 도움이 될 수 있습니다.
http://xjaphx.wordpress.com/2011/06/16/viewholder-pattern-caching-view-efficiently/ http://vsvydenko.blogspot.in/2011/06/android-use-viewholder.html

코드는 성능이 저하 될 수있는 ListView의 스크롤 동안 자주) findViewById를을 (호출 할 수 있습니다. 어댑터가 재활용을 위해 팽창 된 뷰를 반환하는 경우에도 요소를 찾아보고 업데이트해야합니다. findViewById()를 반복적으로 사용하는 방법은 "view holder"디자인 패턴을 사용하는 것입니다.

ViewHolder 객체는 레이아웃의 태그 필드 안에 각 구성 요소 뷰를 저장하므로 반복적으로 검색하지 않고 즉시 액세스 할 수 있습니다.

관련 문제