2014-07-22 3 views
1

제 목록보기가 스크롤 될 때 convertView가 잘못되었지만 위치가 올바르지 않습니다.목록보기를 스크롤하는 중에 'convertView'객체가 잘못되었습니다.

나는로드 '위치'에 매개 변수가 '0' 지수라고, 내 목록보기 3 개 항목을 가지고 convertView는 입니다.

나는 다음 항목 '위치'에 하나씩 스크롤

'1'하고 convertView도 입니다.

문제는 항목 3에 상기 '위치''2'이지만 'convertView은'널되지는, 그것이 제 항목 convertView로 채워져있다.

왜 그럴까요?

public View getView(final int position, View convertView, ViewGroup parent) { 
     View itemView = convertView; 
     if (itemView == null) { 
      itemView = getLayoutInflater().inflate(R.layout.post_layout, parent, false); 

      postViewHolder        = new PostViewHolder(); 
      postViewHolder.commentsImageButton   = (ImageButton) itemView.findViewById(R.id.postAddCommentsImageButton); 

      itemView.setTag(postViewHolder); 
     }else{ 
      postViewHolder = (PostViewHolder) itemView.getTag(); 
     } 

} 당신은 당신의 목록보기에 N 널 (null) 항목을 얻을 것이다

+0

왜 당신이 convertView의 위치를 ​​필요합니까 시도? – AlexBalo

+0

return 문이 없습니다. 'return itemView' – DCoder

답변

0

public View getView(final int position, View convertView, ViewGroup parent) { 
     View itemView = convertView; 
     PostViewHolder postViewHolder = null; 
     if (itemView == null) { 
      itemView = getLayoutInflater().inflate(R.layout.post_layout, parent, false); 
      postViewHolder        = new PostViewHolder(); 
      postViewHolder.commentsImageButton   = (ImageButton) itemView.findViewById(R.id.postAddCommentsImageButton); 

      itemView.setTag(postViewHolder); 
     }else{ 
      postViewHolder = (PostViewHolder) itemView.getTag(); 
     } 
     postViewHolder.position = position; 
     :do your stuff with postViewHolder 
     : 
     return itemView; 
} 
1

많은 행이 화면에 입력하는 방법에 따라 변경이 값의 N.

예를 들어 화면에 3 개의 행이있는 경우 4 개 또는 5 개의 행 항목이있을 수 있습니다. 이는 Android가 이전보기를 새로운보기로 재활용하기 때문입니다.

홀더 위치를 추적해야하는 경우 if/else 문에서 postViewHolder.position을 이동하십시오.

희망이 있습니다.

+0

답해 주셔서 감사합니다. 나는 postViewHolder.position을 질문에서 제거했다. 그것은 무의미하다. – EitanG

+0

이게 문제를 해결 했습니까? – zozelfelfo

+0

답변 해 주셔서 감사합니다. 이전보기를 재활용하지만 viewHolder 패턴을 사용하면 재생 된 convertView가로드됩니다. 잘못된 경우 'findViewByID'의 모든보기가 재생 된 convertView를 지정하고 새보기를 만들지 않습니다. – EitanG