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

아래에 리스트뷰 전체선택 질문했던 코드 입니다.

0 추천
class FileAdapter extends ArrayAdapter<Files> implements OnClickListener{
 private ArrayList<Files> files;
 private ViewHolder vh = null;
 
 public FileAdapter(Context context, int textViewResourceId, ArrayList<Files> files) {
  super(context, textViewResourceId, files);
  this.files = files;
  isChecked = new boolean[files.size()];
  all_check = (CheckBox)findViewById(R.id.main_all_check_box);
  all_check.setOnClickListener(this);
  // TODO Auto-generated constructor stub
 }
 public View getView(int position, View convertView, ViewGroup parent){
  View v = convertView;
  if(v == null){
   LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   v = vi.inflate(R.layout.ex01, null);
   vh = new ViewHolder();
   vh.tv1 = (TextView)v.findViewById(R.id.label1);
   vh.tv2 = (TextView)v.findViewById(R.id.label2);
   vh.iv = (ImageView)v.findViewById(R.id.folder_icon);
   vh.cb = (CheckBox)v.findViewById(R.id.check01);
   isChecked[position] = vh.cb.isChecked();
   v.setTag(vh);
  }
  else{
   vh = (ViewHolder)v.getTag();
   vh.cb.setChecked(isChecked[position]);
  }
  
  Files f = files.get(position);
     
  if(f != null){
   각 파일 속성   
  }
  
  vh.cb.setFocusable(false);
  vh.cb.setClickable(false);
  vh.cb.setOnClickListener(this);   

  return v;
 }
 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  CheckBox cb = (CheckBox)v;
  if(v.getId() == R.id.check01){
   isChecked[Integer.parseInt(v.getTag().toString())] = cb.isChecked();
  }
  else if(v.getId() == R.id.main_all_check_box){
   for(int i = 0; i < files.size(); i++){
    if(files.get(i).file_type.equals("f")){
     if(adapter2.getItem(i).file_type.equals("f")){
      isChecked[i] = all_check.isChecked();
     }
    }
   }
   adapter2.notifyDataSetChanged();
  }
 }  
}

으으...조건 이것저것 바꿔가며 해봤지만..아직 해결을 못했습니다...

도대체 어디가 잘못 된 건가요...

익명사용자 님이 2013년 5월 27일 질문

1개의 답변

0 추천

vh.cb.setChecked(isChecked[position]); 부분을 밖으로 빼 보세요~

노예의집 (23,370 포인트) 님이 2013년 5월 27일 답변
헉...빼서 해보고 안됐었다고 생각하고있었는데...
이제 되네요... 감사합니다!!!!
아.. 코드가 약간 바뀌어야 되는군요.
현재 전체체크박스 선언후 바로 false 세팅해준후
말씀해주신대로 하니까 성공했습니다.
...
isChecked = new boolean[files.size()];
for(files크기만큼){
isChecked[i] = false;
}
...
if(v == null){    
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.ex01, null);
    vh = new ViewHolder();
    vh.tv1 = (TextView)v.findViewById(R.id.label1);
   vh.tv2 = (TextView)v.findViewById(R.id.label2);
    vh.iv = (ImageView)v.findViewById(R.id.folder_icon);
    vh.cb = (CheckBox)v.findViewById(R.id.check01);
    //isChecked[position] = vh.cb.isChecked();  삭제
    v.setTag(vh);
   }
...
후에 vh.cb.setChecked(isChecked[position]);  밖으로 빼니 성공!
...