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

안드로이드 리스트뷰 버튼 중복

0 추천
3일을 헤메고 있습니다. ㅠㅠ

구글링해서 이것저것 다 적용 해봤는데 포기하고 글을 남긴니다.

고수님!! 좀 자세히 문제점과 해결점좀 알려주세요~~

문제 1) 리스트뷰 내부 포지션별 버튼을 클릭 하면   숫자가 카운트 됩니다.

            1번 포지션 버튼을 클릭 하면 숫자가 올라 가는데  아래 스크롤 내려보면 다른 포지션에도 숫자가 올라가 있는

            중복 현상이  생깁니다. ㅠㅠ
 

문제 2) 버튼별 카운트하고 싶은데 ( 페이스북 라이크나 공감처럼)  

          포지션별 모두 순차적인 카운트가 되네요 ㅠㅠ

            원하는건 1부터 n까지 개별 포지션별로 카운트가 되어야 하는데

 

아래는 베이스 어탭트 부분입니다. 좀 확인 좀 해주세요~~~

public class XmlListAdapter extends BaseAdapter{
 protected static final String TAG = null;
 Context context;
 private LayoutInflater inflater = null;
 ArrayList<XmlBean> bean;
 int layout;
  int mCount;
 
 public XmlListAdapter(Context context, int layout, ArrayList<XmlBean> bean) {
  this.context = context;
  
  this.layout = layout;
  this.bean = bean;
  
 }//onCreate
 
 @Override
 public int getCount() { return bean.size(); }
 
 @Override
 public XmlBean getItem(int position) {
  return bean.get(position);
  }
 
 @Override
 public long getItemId(int position) {
  
  return position;
  
 }
  
  class ViewHolder {
     Button btngood;
     ImageView image;
     TextView content1,data1,texteyeview;
   }
 
 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
  final int pos = position;
   final ViewHolder holder;
   View v = convertView;
   if (v == null) {
    
  holder = new ViewHolder();
  this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  v = inflater.inflate(R.layout.list,null);
  //final TextView textlikeclick = (TextView) v.findViewById(R.id.textlikeclick);
  holder.btngood = (Button) v.findViewById(R.id.btngood);

  v.setTag(holder);
  
   }
   
  else {
         holder = (ViewHolder) v.getTag();
        
   }
  
  
  holder.btngood.setTag(pos);
    holder.btngood.setOnClickListener(new OnClickListener() {
    
    @Override
    public void onClick(View v) {
    
     int pos = (Integer) v.getTag();
       
       holder.btngood.setText("" + ++mCount);
    

    }
   });
    
  }
  return v;
  }

  
}

제가 완죤 초보라 좀 자세히 알려주시면 감사 또 감사 드립니다.
알파브이 (300 포인트) 님이 2014년 4월 25일 질문
알파브이님이 2014년 4월 25일 수정

1개의 답변

+2 추천
카운트를 해주는 mCount 자체가 개별적으로 작동하도록 배열, 리스트 등을 사용하여야지요. 지금은 어느것을 클릭하더라도 mCount가 증가되도록 작성되어서 그런것 아닐까요?

소스코드 올리실때는... 그냥 공백은 좀 제거해주셨으면...ㅠㅠ
인연 (31,880 포인트) 님이 2014년 4월 25일 답변
답변 너무 감사드립니다.
제가 초보라 저기코드에서 배열 리스트를 어케 사용할지 ㅠㅠ
public void onClick(View v) {
    int pos = Integer.parseInt(holder.btngood.getTag().toString());
    for (int i = 0; i <= pos; i++) {
    / holder.btngood.setText(String.valueOf(i));
이렇게 꾸몄는데 가 포지션 마다 한번씩만 불려오네요
몇일 요거땜시 밤샘 작업 해서 그런지 머리속이 하얗게 될뿐 ㅠㅠ

근데 더 중요한건 포지션별 카우트 증가하면 중복이 일어납니다.
이부분만 해결좀 하더라도 어케 좀 해보겠는데

한번만 더 조언 부탁드립니다.^^
음.. 만약 카운트 저장을 배열을 사용하여 구현하였다면, count[position]++;
과 같은 코드를 사용하여야겠지요. 이때 position은 listview내의 위치입니다.
...