마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

listview getView 중복 호출 문제 도와주세요...

0 추천

현재 리스트뷰를 사용해서 sns의 홈피드를 구현하고 있습니다. 

버튼위젯은 clickListener를 정의 할 때  int position = (Integer) v.getTag(); 를 사용하면 무리없이 포지션이 꼬이지 않는 상태로 정상 작동을 하고 있지만, 

사진의 clickLIstener를 달아서 사용할 경우엔, 처음 리스트뷰를 그릴 떄 getView가 두번 또는 세번씩 호출 되 리스트뷰를 스크롤 하다가 사진을 클릭 할 경우엔 포지션이 위아래로 꼬여있는 경우가 너무 많은 것 같습니다... 

ListView 또는 Parent Layout의 높이를 match_parent로 적용하면 해결된다는 글도 많이 봐왔지만 저의 경우엔 그것으로는 해결이 되지 않네요... 

if문은 재사용 문제로 삭제해놓은 상태구요.

xml은 하단에 탭바를 만들어놓은 상태에서 상단에 타이틀바와 중앙에 리스트뷰를 배치해 놓은 상태입니다. 

모두 가로와 세로는 match_parent를 사용해서 가중치로 길이를 지정해 놓았습니다. 리스트뷰는 new pull to refresh listview사용중입니다.

몇일 째 지속적인 구글링과 여러 방법을 다 동원해봐도 좀처럼 해결이 안나네요... 도와주세요...

어댑터 부분 소스 코드 입니다.

    public View getView(final int position, View convertView, ViewGroup parent) {
        View v = convertView;
        holder = new ViewHolder();
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(Resource, null);
       
        holder.linear_profile = (LinearLayout) v.findViewById(R.id.linear_profile);
        holder.layout_homefeed = (LinearLayout) v.findViewById(R.id.layout_homefeed);
        holder.iv_profile = (CircleImageView) v.findViewById(R.id.iv_profile);
        holder.tv_nickname = (TextView) v.findViewById(R.id.tv_nickname);
        holder.tv_regdate = (TextView) v.findViewById(R.id.tv_regdate);
        holder.rel_homefeed = (RelativeLayout) v.findViewById(R.id.rel_homefeed);
        holder.iv_homefeed = (ImageView) v.findViewById(R.id.iv_homefeed);
        holder.iv_homefeed.setScaleType(ImageView.ScaleType.CENTER_CROP);
        holder.tv_description = (TextView) v.findViewById(R.id.tv_description);
        holder.tv_description.setMaxLines(10);

        holder.tv_like = (TextView) v.findViewById(R.id.tv_like);
        holder.tv_picks = (TextView) v.findViewById(R.id.tv_picks);
        holder.tv_comment = (TextView) v.findViewById(R.id.tv_comment);
        holder.linear_like = (LinearLayout) v.findViewById(R.id.linear_like);
        holder.linear_picks = (LinearLayout) v.findViewById(R.id.linear_picks);
        holder.linear_comment = (LinearLayout) v.findViewById(R.id.linear_comment);
        holder.linear_more = (LinearLayout) v.findViewById(R.id.linear_more);
        holder.rel_tag = (RelativeLayout) v.findViewById(R.id.rel_tag);

        holder.iv_like = (ImageView) v.findViewById(R.id.iv_like);
        holder.iv_picks = (ImageView) v.findViewById(R.id.iv_picks);
        holder.iv_comment = (ImageView) v.findViewById(R.id.iv_comment);
        holder.iv_more = (ImageView) v.findViewById(R.id.iv_more);
        holder.ivLike = (ImageView) v.findViewById(R.id.ivLike);
        holder.ivPick = (ImageView) v.findViewById(R.id.ivPick);
        v.setTag(holder);
        //버튼 피드별 포지션 가져오기
        holder.iv_like.setTag(position);
        holder.iv_picks.setTag(position);
        holder.rel_tag.setTag(position);
        holder.ivLike.setTag(position);
        holder.ivPick.setTag(position);
//홈 사진 버튼 클릭 리스너
        holder.layout_homefeed.setTag(position);
        holder.layout_homefeed.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                final Integer kPosition = (Integer) v.getTag();
                    holder.layout_homefeed.removeAllViews();
                    Toast.makeText(getContext(), String.valueOf(kPosition), Toast.LENGTH_SHORT).show();
            }
        });
  return v;
}

 

늅늅개발자 (490 포인트) 님이 2015년 11월 30일 질문

1개의 답변

0 추천
 
채택된 답변
aucd29 (218,390 포인트) 님이 2015년 12월 1일 답변
늅늅개발자님이 2015년 12월 3일 채택됨
답변 감사합니다 아무래도 기본적인 것부터 다시 차근차근 해봐야할거같습니다
...