리스트 로우 마다 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)
[lunux]리눅스 폴더별 용량 확인
리눅스 폴더별 용량 확인 조회 하고자 하는 디렉토리 리스트가있는 경로로 이동후 du -h --max-depth=1
-
pom.xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId&g...
-
수십대의 서버에 특정 쉘을 실행한다거나 파일을 수정해야할경우 호스트 입력 아이디 입력 패스워드 입력은 여간 짜증나는일이 아닐수 없다. 이를 한방에 해주는 방법 teraterm 를 설치한다( putty 는 버리자 ) 예를 들면 19...
-
자바에서 redis 를 사용할때는 jedis 라는 wrapping api 를 사용 하는데 기본 사용법은 메이븐에 아래 의존 라이브러리를 추가하고 <dependency> <groupId>redis.clients</g...
덕분에 잘 해결했습니다. 감사합니다!!
답글삭제도움이 되었다니 다행입니다.^^
삭제감사합니다. 이거 해결하려고 구글링만 몇 시간했는데 여기서 해결했네요ㅠㅠ
답글삭제ㅎㅎㅎ 해결했다는게 중요 한거죠 ^^
삭제작성자가 댓글을 삭제했습니다.
답글삭제