안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.. 며칠전에도 ListView에 대한 내용으로 문의를 드렸었는데요..
제 의도를 제대로 표현못한것 같아서 다시 올립니다
아이콘1 아이콘2
==============================
ListView 체크 | 이름 | 아이콘 | 아이콘
ListView 체크 | 이름 | 아이콘 | 아이콘
위와 같은 형태로 ListView를 만들었습니다
이상태에서 체크를 해주고 아이콘을 클릭하면 ListView 내부의 아이콘 부분에 그림이 표시되고
다시 체크를 하게 되면 아이콘 그림이 사라질 수 있게 구현하려고 합니다
그런데.. 위의 아이콘1과 아이콘2는 ListView 와는 별개의 레이아웃으로 구성되어 있어서 getView 에서 건드릴수가 없는것 같습니다..
(getView에서 ListView 내부의 체크, 이름, 아이콘, 아이콘 이 4가지 요소를 건드리는 것은 잘됩니다)
그래서 getView 가 아닌 메인의 onCreate 에서 구현을 해주려고 하니까 ListView 각각의 요소에 대해서 접근이 불가능한 것 같구요..
(ListView 자체는 접근이 가능하지만.. ListView 내부의 아이콘에 접근을 해야 하다보니까 안되는것 같습니다)
이럴때 ListView 내부의 요소들을 직접 건드릴수 있는 방법이 있을까요?
직접 ListView 내부의 요소들을 건드릴수 없다면..
getView 내에서 ListView 외부의 아이콘1, 아이콘2를 건드릴수 있는 방법은 없을까요?
체크풀림 문제때문에 며칠을 고생했는데.. 이번에는 아이콘 때문에 삽질중입니다 ㅜㅜ
답변 부탁드리겠습니다 (__)
제 의도를 제대로 표현못한것 같아서 다시 올립니다
아이콘1 아이콘2
==============================
ListView 체크 | 이름 | 아이콘 | 아이콘
ListView 체크 | 이름 | 아이콘 | 아이콘
위와 같은 형태로 ListView를 만들었습니다
이상태에서 체크를 해주고 아이콘을 클릭하면 ListView 내부의 아이콘 부분에 그림이 표시되고
다시 체크를 하게 되면 아이콘 그림이 사라질 수 있게 구현하려고 합니다
그런데.. 위의 아이콘1과 아이콘2는 ListView 와는 별개의 레이아웃으로 구성되어 있어서 getView 에서 건드릴수가 없는것 같습니다..
(getView에서 ListView 내부의 체크, 이름, 아이콘, 아이콘 이 4가지 요소를 건드리는 것은 잘됩니다)
그래서 getView 가 아닌 메인의 onCreate 에서 구현을 해주려고 하니까 ListView 각각의 요소에 대해서 접근이 불가능한 것 같구요..
(ListView 자체는 접근이 가능하지만.. ListView 내부의 아이콘에 접근을 해야 하다보니까 안되는것 같습니다)
이럴때 ListView 내부의 요소들을 직접 건드릴수 있는 방법이 있을까요?
직접 ListView 내부의 요소들을 건드릴수 없다면..
getView 내에서 ListView 외부의 아이콘1, 아이콘2를 건드릴수 있는 방법은 없을까요?
체크풀림 문제때문에 며칠을 고생했는데.. 이번에는 아이콘 때문에 삽질중입니다 ㅜㅜ
답변 부탁드리겠습니다 (__)
2010.11.09 10:32:37
감사합니다 ^^
그런데 단순히 체크되어 있는것으로 끝이 아니라.. 체크가 된 상황에서 외부에서 아이콘을 클릭했을때 작동을 해야 하다 보니
위 방법은 좀 곤란하네요 ㅎㅎ
아직 답을 찾은 것은 아닌데.. 외부 버튼의 리스너를 getView 안에 넣는게 아니라는 것은 확실히 알았습니다..
외부에서 리스너를 구현하면서 내부로 접근하는 방법을 찾아봐야겠네요 ㅎㅎ
2010.11.09 10:43:37
Adapter에 들어가는 데이터를 변화 시킨다음에 새로고침 하는 방향으로 가야 할거 같은데요....
우선 체크 목록이야 어댑터에서 관리하고 있을거고..
아이콘 1을 터치했을때 데이터 목록(리스트나 배열)을 루프를 돌면서 체크된넘에 대해서
"아이콘1을 보여줄 것인가?"에 해당하는 flag값을 toggle(반대로 바꿈)하면 되겠네요.
일단 Adapter에 주는 데이터 객체가 단순히 이름, 아이콘만 있는게 아니고...
"아이콘을 보여줄 것인가"에 대한 Flag(boolean)값이 포함되어있어야 하구요..
getView에서는 flag가 true면 icon 표시, 아니면 표시안함 이런식의 루틴만 넣습니다.
데이터의 변화는 모두 밖에서 일어날 것이고 notifyDataSet....(); 메소드를 통해 다시 getView를 거치면
새로 고침 되어서 나올겁니다.
우선 체크 목록이야 어댑터에서 관리하고 있을거고..
아이콘 1을 터치했을때 데이터 목록(리스트나 배열)을 루프를 돌면서 체크된넘에 대해서
"아이콘1을 보여줄 것인가?"에 해당하는 flag값을 toggle(반대로 바꿈)하면 되겠네요.
일단 Adapter에 주는 데이터 객체가 단순히 이름, 아이콘만 있는게 아니고...
"아이콘을 보여줄 것인가"에 대한 Flag(boolean)값이 포함되어있어야 하구요..
getView에서는 flag가 true면 icon 표시, 아니면 표시안함 이런식의 루틴만 넣습니다.
데이터의 변화는 모두 밖에서 일어날 것이고 notifyDataSet....(); 메소드를 통해 다시 getView를 거치면
새로 고침 되어서 나올겁니다.
2010.11.09 12:24:09
ListView에 아이콘이 5개가 있구요.. 각각에 대해 표시할 외부 버튼이 5개가 있습니다
그리고 아이콘 5개에 대해서 true, false를 저장할수 있도록 변수를 5개 만들었구요
getView에서 체크된 List의 위치를 저장해놨다가 버튼을 클릭할때 해당 아이콘이 활성화 될수 있도록 체크의 위치를 넘겼구요.. 그리고 어댑터.notifyDataSetChanged() 를 호출했습니다
다시 getView에는 true냐 false냐 체크해서 VISIBLE, INVISIBLE 값을 줬구요
암튼 이런식으로 해결했습니다;;;
상당히 비효율적인것 같고.. 다른 좋은 방법이 있을테지만.. 당장 급한거라서 이렇게 했네요 ^^;;;
답변 감사드립니다 ^^
getView에서
if ( ((CheckBox)listView.getChildAt(position).findViewById(체크박스)).ischecked () ) {
........
} 이런방법으로 안되는건가용?..