안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요?
스레드에서 Intent를 통하여 GridView를 업데이트하고 있습니다.
notifyDataSetChanged() 물론 잘 동작합니다.
문제는 스레드에서 처리되어 GridView가 업데이트 되는 동안에
사용자가 GridView Item에 포함된 CheckBox를 클릭하면 경우에 따라 index를 잘못 가져오고 있습니다.
살펴보니 notifyDataSetChanged()를 통하여 Grid 또는 List가 업데이트 되는 동안에 문제가 있을 수 있더군요.
notifyDataSetChanged() 를 통한 업데이트는 Thread safe 하지 않습니다.
그래서 업데이트가 되는 동안에는 CheckBox 클릭을 무시하게 하려고 합니다.
GridView 나 ListView가 업데이트 되고 있다는 것을 알 수 있는 방법이 있을까요?
제가 찾아봐도 없는 걸 보니 업데이트 상태는 안드로이드가 기본적으로 지원하고 있지 않습니다.
혹시 여러 고수분들께 이 문제를 해결 할 수 있는 방법이 있는지(편법이라도 좋습니다.) 문의드립니다.
스레드에서 Intent를 통하여 GridView를 업데이트하고 있습니다.
notifyDataSetChanged() 물론 잘 동작합니다.
문제는 스레드에서 처리되어 GridView가 업데이트 되는 동안에
사용자가 GridView Item에 포함된 CheckBox를 클릭하면 경우에 따라 index를 잘못 가져오고 있습니다.
살펴보니 notifyDataSetChanged()를 통하여 Grid 또는 List가 업데이트 되는 동안에 문제가 있을 수 있더군요.
notifyDataSetChanged() 를 통한 업데이트는 Thread safe 하지 않습니다.
그래서 업데이트가 되는 동안에는 CheckBox 클릭을 무시하게 하려고 합니다.
GridView 나 ListView가 업데이트 되고 있다는 것을 알 수 있는 방법이 있을까요?
제가 찾아봐도 없는 걸 보니 업데이트 상태는 안드로이드가 기본적으로 지원하고 있지 않습니다.
혹시 여러 고수분들께 이 문제를 해결 할 수 있는 방법이 있는지(편법이라도 좋습니다.) 문의드립니다.
2011.02.01 12:22:59
notifyDataSetChanged를 하면 현재 보여지는 아이템들에 대한 getView를 순서대로 호출할겁니다.
notifyDataSetChanged호출할때 flag같은걸 두시고, getView안에 타이머같은 것을 돌리셔서,
getView가 연속적으로 호출되는 것이 끝나면 업데이트가 끝난거로 판단하시면 될것같습니다.
2011.02.07 13:47:04
조언 감사드립니다. 그대로 해 보았으나 그러나 역시 간단하지 않네요.
전체 리스트가 대략 1000개 정도 이고 화면에 보이는 갯수는 32개입니다.
각각의 아이템에 그림을 하나씩 등록시키고 리스트를 업데이트하는 구조인데요.
그러니까 업데이트가 1000번 된다고 보면 되구요, 업데이트 도중 화면에 보이는 아이템에 있는 체크박스를 클릭하면
어쩌다 인덱스를 잘못 가져오는 것이 문제입니다.
1000번의 업데이트가 다 되고 나서는 문제가 없습니다.
이 문제를 어떻게 풀지 장고를 해야겠네요 ㅡㅡ;
해결하고 나면 방법을 올리도록 하겠습니다.



