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

ListView 스크롤 시 데이터 변경 문제..

0 추천

현재 ListView를 사용하여 Text와 버튼으로 이루어진 ListView를 사용중에 있습니다.

getView 소스입니다.

 

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    final int pos = position;
    ViewHolder holder;
        //final ToggleButton btn = null;
        
        if (convertView == null) {
             
        convertView = vi.inflate(R.layout.message,parent,false);
            
            //text = (TextView)v.findViewById(R.id.name_text);
            //btn = (ToggleButton)v.findViewById(R.id.next_Btn);
            
            holder = new ViewHolder();
            
            holder.m_TextView = (TextView)convertView.findViewById(R.id.name_text);
            holder.m_Btn = (ToggleButton)convertView.findViewById(R.id.next_Btn);
           
            
            convertView.setTag(holder);
            
        }else
        {
        holder  = (ViewHolder) convertView.getTag();
            
        }
        
        Custom_List_Data custom_list_data = items.get(position);
        if(custom_list_data !=null)
        {
        holder.m_TextView.setText(custom_list_data.getMain_Title());
        }
        
        holder.m_Btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 터치 시 해당 아이템 이름 출력
            //Toast.makeText(context, "holder button : " + holder.m_Btn.getTag(pos), Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(context,SubMainclntoll.class);
    context.startActivity(intent);
            }
        });
        
        return convertView;
    }
    class ViewHolder {
    public TextView m_TextView;
    public ToggleButton m_Btn;
    }
 
}
 
현재 이런식으로 ViewHolder를 사용하여 구현중에 있지만 스크롤만하면 데이터가 꼬입니다.
 
그리고 리스트뷰에서 버튼 클릭시 하나의 버튼이 클릭되어 있다면 다른 버튼은 클릭이 되지 않도록 할 수 있는 방법이 있나요 ?.......ㅠ
초보이무니다 (470 포인트) 님이 2014년 9월 17일 질문

2개의 답변

+1 추천
 
채택된 답변
private int selectedPos = -1;
 
 
    holder.m_Btn.setTag(position);
    if (selectedPos != -1 && selectedPos != position) {
        holder.m_Btn.setEnabled(false);
    } else {
        holder.m_Btn.setEnabled(true);
    }
 
    holder.m_Btn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            selectedPos = (int) v.getTag();
            yourAdapter.notifyDataChanged();
 
            Intent intent = new Intent(context,SubMainclntoll.class);
            context.startActivity(intent);
        }

 

    });
 
 
aucd29 (218,390 포인트) 님이 2014년 9월 17일 답변
초보이무니다님이 2014년 9월 17일 채택됨
답변 정말 감사합니다.

비슷하게나마 응용해서 사용할 수 있을꺼 같습니다..
+1 추천

데이터가 꼬인다는게 어떤 의미인지는 모르겠지만...

아래의 빨간부분코드를 추가해주세요.

재사용되기 때문에 조건에 부합되지 않을 경우 이전의 데이터가 나오게 됩니다.

그런데 null 일 경우가 없을꺼 같은데...

 

if(custom_list_data !=null)
{
         holder.m_TextView.setText(custom_list_data.getMain_Title());
} else{
         holder.m_TextView.setText("");
}
바램 (19,650 포인트) 님이 2014년 9월 17일 답변
답변 감사합니다..

초보다 보니 정확한 질문을 하지 못해 죄송합니다.

도움 감사합니다.
...