낮에 질문했던거에서 추가로 궁금한점이 있어서 질문드립니다.
일단 현재 상황은 ImageView와 TextView로 구성된 ListView가 있고, ListView를 클릭 시 클릭한 부분만 이미지가 변경됩니다.
그런데 문제는 변경은 되는데 클릭한 부분이 변경되는게 아니라 일정한 패턴으로 다른 부분의 이미지가 바뀝니다.
일단 소스입니다.
public View getView(int position, View convertView) {
View v = convertView;
if(v == null){
LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_item, null);
}
else{
String i = list.get(position);
if(i != null){
ImageView icon = (ImageView)v.findViewById(R.id.img);
if(icon != null){
switch(flag[position]){
case 0 :
Log.d("position","position" + position);
Log.d("바뀌기 전 flag[position]","flag[position] :: " + flag[position]);
icon.setImageResource(R.drawable.bg_check_off);
flag[position] = 1;
Log.d("바뀐 후 flag[position]","flag[position] :: " + flag[position]);
break;
case 1 :
Log.d("position","position" + position);
Log.d("바뀌기 전 flag[position]","flag[position] :: " + flag[position]);
icon.setImageResource(R.drawable.bg_check_on);
flag[position] = 0;
Log.d("바뀐 후 flag[position]","flag[position] :: " + flag[position]);
break;
}
}
}
}
return v;
}
전역변수로 flag가 int배열로 있고 초기값 0으로 셋팅되어있습니다.
onItemClick에 위의 소스가 돌아가게 되도록 해놓았습니다. (밑의 소스)
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView<?> list, View v, int position, long id){
getView(position, v);
}
로그를 찍어보면 클릭된 부분의 position값과 체크가 되었는지 안되었는지는 잘 찍힙니다.
그러나 이미지가 엉뚱한게 바뀌는게 도대체 어디가 잘못되어 그런건지 모르겠습니다. 알려주세요~




눌렀을때, 직접 getView를 호출하시는건 좀 아니라고 보이네요.
저렇게 하면, List를 위아래로 스크롤할때마다, 꼬이기만 할것으로 보이네요.
List를 사용하는 곳에서 아래 코드를 추가하시고
listView.setItemsCanFocus(false);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
Adapter 쪽에는
CheckBox cb = (CheckBox) v.findViewById(R.id.checkBox);
if (cb != null) {
cb.setChecked(((ListView) parent).isItemChecked(position));
cb.setFocusable(false);
cb.setClickable(false);
}
이런 식의 코드로 수정되어야합니다.
위에는 checkbox니까 imageview에 맞게 코딩을 해주셔야겠죠
간단히 ((ListView) parent).isItemChecked(position)값이 flag[position] 값을
대신한다고 보시면 됩니다
그리고 클릭시에 getView를 직접 호출하시는 부분은 빼셔야 할것으로 보이네요