리스트 로우 마다 checkBox 를 넣어야 할때가 있는데 스크롤로 인해 체크된 아이템이 화면 밖으로 나갓다 들어올시 어댑터의 getView 등의 함수(화면을 다시 그리는...)가 호출되면서 체크박스가 제대로 체크가 안되는 경우가 있다.
여러가지 해결방법이 있지만
난 각각의 아이템 객체에 isChecked 변수를 활용해서 해결해 보았다.
AutoCallServiceVo.class
public class AutoCallServiceVo {
 String  phoneNum;
 String  phoneName;
 String  count;
 String   phoneId;
        //추가된 변수
 boolean  isChecked;
//어댑터
AutoCallBaseAdapter.class
public class AutoCallBaseAdapter extends BaseAdapter{
.....
public View getView(int position, View convertView, ViewGroup parent) {
  // TODO Auto-generated method stub
  
  
  
  //
  View itemLayout = convertView;
  
  //
  
  
  //리스너에서 사용할 포지션 변수 (그냥 position 값을 넣으면 컴파일 에러)
  final int checkBoxPosition = position;
  
  ViewHolder viewHolder = null;
  
  
  if(itemLayout == null){
   
   itemLayout = mLayoutInflater.inflate(R.layout.list_view_layout, null);
   
   
   
   
   viewHolder = new ViewHolder();
   
   
   
   //viewHolder._id    = (TextView)itemLayout.findViewById(R.id._id);
   viewHolder.phoneName  = (TextView)itemLayout.findViewById(R.id.phoneName);
   viewHolder.phoneNum  = (TextView)itemLayout.findViewById(R.id.phoneNum);
   viewHolder.count  = (BackButtonFocusOutEditText)itemLayout.findViewById(R.id.count);
   viewHolder.checkBox  = (CheckBox)itemLayout.findViewById(R.id.checkbox);
   
   
      
   itemLayout.setTag(viewHolder);
   
   //뷰홀더가 정의되어 있을경우 는
  }else{
   
   viewHolder = (ViewHolder)itemLayout.getTag();
   
  }
  
  // 데이터를 셋팅한다.
  //viewHolder._id.setText(mData.get(position).phoneId);
  viewHolder.phoneName.setText(mData.get(position).phoneName);
  viewHolder.phoneNum.setText(mData.get(position).phoneNum);
  viewHolder.count.setText(mData.get(position).count);
  
  
  
  
  //체크박스 클릭 이벤트
  viewHolder.checkBox.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    Log.d("AutoCallService", "checkClick");
    
    AutoCallServiceVo checkViewItem = (AutoCallServiceVo)getItem(checkBoxPosition);
    
    Log.d("AutoCallService", "checkItem : " + checkViewItem.getPhoneName());
    
    //체크 안되어 있는 경우
    if(checkViewItem.isChecked){
     
     mData.get(checkBoxPosition).isChecked = false;
     
    //체크가 되어 있는 경우
    }else{
     
     mData.get(checkBoxPosition).isChecked = true;
     
  
    }
    //데이터 변경 알림
    notifyDataSetChanged();
    
   }
   
   
  });
  
  
  //로우별 isChecked 값에 따른 체크상태를 표시
  viewHolder.checkBox.setChecked(mData.get(position).isChecked);
  
  
  //값이 다 셋팅된 view 객체를 반환한다.
  return itemLayout;
 }
......
피드 구독하기:
댓글 (Atom)
[springboot]실제 JWT 발급 및 검증 구현
실제 JWT 발급 및 검증 구현 이전 단계에서 만든 임시 토큰을 실제 암호화된 JWT(JSON Web Token)로 대체하고, Spring Security 필터를 통해 API 요청을 보호하는 방법을 구현합니다. Part 1: 백엔드 (Spring ...
- 
수십대의 서버에 특정 쉘을 실행한다거나 파일을 수정해야할경우 호스트 입력 아이디 입력 패스워드 입력은 여간 짜증나는일이 아닐수 없다. 이를 한방에 해주는 방법 teraterm 를 설치한다( putty 는 버리자 ) 예를 들면 19...
- 
pom.xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId...
- 
[oracle]백업및 복구 오라클 덤프 백업및 복구 윈도우 서버 기반 간단 정리 --디렉터리 조회 sqlplus 또는 dbtool 입력시작 SELECT * FROM DBA_DIRECTORIES ; --D:...
 
덕분에 잘 해결했습니다. 감사합니다!!
답글삭제도움이 되었다니 다행입니다.^^
삭제감사합니다. 이거 해결하려고 구글링만 몇 시간했는데 여기서 해결했네요ㅠㅠ
답글삭제ㅎㅎㅎ 해결했다는게 중요 한거죠 ^^
삭제작성자가 댓글을 삭제했습니다.
답글삭제