안드로이드 개발 질문/답변
(글 수 45,052)
ListView를 활용하여 폰북을 만드는데
ListView에 ChecBox을 넣었는데 CheckBox를 체크하였는데...
주기적으로 체크가 됩니다. 처음껄 체크하면 5번째 10번째 ... 이렇게 한번 체크했는데.
여러개가 체크되는걸로 나옵니다.
@Override
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.item_phonebook, null);
Person p = items.get(position);
vh = new ViewHolder();
v.setTag(vh);
vh.phone_name = (TextView) v.findViewById(R.id.phonebook_name);
vh.phone_name.setText(p.Name);
vh.phone_number = (TextView) v.findViewById(R.id.phonebook_number);
vh.phone_number.setText(p.Number);
vh.phone_select = (CheckBox) v.findViewById(R.id.phonebook_check);
}else {
vh = (ViewHolder) v.getTag();
}
return v;
}
저도 체크박스 리스트 구현시 님과 같은 문제가 있어서 아래와 같은 방법으로 해결했습니다.
일단 체크박스 상태값을 저장해둘 임시 저장소를 만듭니다
static ArrayList<String> checkedlist = null;
그리고 체크박스를 선택 or 해제 할때 이벤트를 받는 메서드 하나 만들고
public void onChecked(View v) {
CheckBox cb = (CheckBox) v;
String key = (String) v.getTag(); // 임의로 tag 값에 키를 저장해둔 경우
if (checkedlist == null)
checkedlist = new ArrayList<String>();
if (cb.isChecked()) {
if (!checkedlist.contains(key))
checkedlist.add(key);
} else
checkedlist.remove(key);
}
layout.xml 에 체크박스에 이벤트 등록합니다.
android:onClick="onChecked"
그리고 getView 구현시
final String key = items[position];
ck.setTag(key);
if(checkedlist != null && checkedlist.contains(key)){
ck.setChecked(true);
}
와 같이 저장소에 값이 있으면 체크합니다.
전 위와 같은 방법으로 해결했습니다.
다른 고수분들은 더 좋은 방법을 알고 계시겠지만.
제 짱구로 고민하여 나름 해결한 방법입니다.