안녕하세요. 그림과 같은 기능을 구현 중에 있습니다.

개발중이라서 아이콘은 그냥 아무거나 가져다 쓴 상황인데요, 일단 왼쪽의 X 버튼을 누르면 오른쪽의 아이콘이 위, 아래 그림으로 변하는 것을 구현하려고 합니다.
소스는 대충 다음과 같습니다
public class CustomAdapter extends ArrayAdapter<ArrayItemForArrayAdapter> {
ArrayList<ArrayItemForArrayAdapter> data;
ItemHolder holder;
int mode = 1;
//생성자, 초기화 과정 등은 생략하겠습니다.
// 중요한 부분만 적을게요
@Override
public View getView( int position, View convertView, ViewGroup parent ) {
View view = ~;
holder = new ItemHolder();
holder.button.setOnClickListener( new View.OnClickListener() {
@Override
void onClick( View v ) {
if ( mode == 1 ) {
mode = 2;
holder.toggle1.setVisibility(INVISIBLE);
holder.toggle2.setVisibility(VISIBLE);
} else if ( mode == 2 ) {
mode = 1;
// 위와는 반대
}
}
});
return view
}
class ItemHolder {
ImageView button, toggle1, toggle2;
}
}
이런, 생으로 썼더니 들여쓰기가 잘 안 되네요.
아무튼 아시는 분은 잘 아실 거라고 생각합니다.... 저렇게 어댑터를 만들고, 메인의 리스트뷰에 철썩 붙였습니다.
문제는 저 상태에서 어느 row의 버튼을 클릭을 하든지, 내가 누른 row의 아이콘이 토글되는 것이 아니고, position이 MAX인, 즉 마지막 row의 아이콘이 토글됩니다.
가령 3개의 줄이 있다고 칠 때 1번째 줄의 X를 누르면 1번이 아닌 3번 줄의 그림이 바뀌고, 2번을 눌러도 역시 3번, 3번을 누르면 당연히 3번이 바뀝니다. 이걸 어떻게 해결해야 할지 모르겠네요.
BaseAdapter를 쓸 경우에는 ArrayList에 뷰 클래스를 붙이고 리스트에 접근해서 바로 고칠 수가 있는데, ArrayAdapter를 쓰니까 도통 접근할 방법이 없네요. 그렇다고 BaseAdapter에 붙인 리스트에서 리스너를 주면 정상적으로 동작하질 않구요. 그러니까 ArrayAdapter 내부에서 처리를 해야 할 것 같은데, 어떻게 하면 좋을지 명안을 부탁드립니다.