관계, Networking 그리고 Programming

충격과 경악의 삽질!!!

androbook 본캐 2013. 6. 14. 19:32

먼저 좀 울자...


















이런 $&&!^&*@(!*)#$&*^$$*&@ ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 하루 종일 삽질을 했어. DB에 추가/삭제된 내용이 ListView에 업데이트 되질 않는거야!!! 처음에는 곧 문제를 수정할 수 있을 거라고 생각했는데, 오늘 하루 종일을 뒤져서 방금 너무 어이없게 문제를 수정했다...흐어어어엉...


내가 구현한 ListViewCustom Adapter를 사용하며, 이 Custom Adapter는 CursorAdapter를 상속해서 만든 클래스이다. Listview update를 검색하면 당연스럽고도 간단하게 notifyDataSetChanged 사용하면 된다는 말이 나온다. 그래서 아무런 생각이 없이 myAdapter.notifyDataSetChanged() 를 코딩한 후 당연히 리스트뷰가 업데이트 될 것이라고 단정한다. 하지만 곧... 뭐야 이거. 안되잖아. =_=


다시 구글을 검색한다. 비슷한 질문이 꽤 많다. notifyDataSetChanged()가 왜 동작을 안하는 거죠. 일반적으로는 동작하는데, custom adapter를 사용하면 동작을 안해요, 등등... 답변도 많다. notifyDataSetChanged() 후, notifyDataSetInvalidated()도 써줘야 한다는 말도 있고, adapter를 새로 생성해서 setAdapter하라는 말도 있고 view의 invalidate() 함수를 사용해라 등등. 하지만 내가 원하는 것은 어째서  사용하라고 한 notifyDataSetChanged()가 동작을 안하는가? 인 것이다.


이거 쓰라매. 이게 리스트 업데이트 하라고 만든 함수라매!! 라며 계속 구글을 뒤적거린다.


하루종일을 진이 빠지도록 이것 저것 검색하다가 cursoradapter를 연관어로 넣어 검색해서 답을 찾았다. notifyDataSetChanged()를 사용하지 말고 changeCursor() 를 사용하라는 것이었다. 질문자도 나와 비슷한 과정을 거쳐 답을 얻은 모양이었다. 답변의 아래 이렇게 재질문을 한 것이다. : So what does notifydatachanged do then? (그렇다면, notifyDataSetChanged는 뭘 하는데요? - 질문자 흥분한 듯. 오타 났다.)


거기에 답변자 분께서 달아주셨다. : There is no "notifydatachanged". If you mean notifyDataSetChanged() on Adapter, that is how the SimpleCursorAdapter tells the ListView that data was changed..... (notifydatachanged라는 건 없습니다.-답변자 분, 먼저 오타를 지적하심- Adapter에서 쓰는 notifyDataSetChanged()를 말하는 거라면, 그건 어뎁터가 리스트뷰에 데이터가 바뀌었다고 알려주는 겁니다. 블라블라...)


아니 그래. 그건 알겠어. 근데, 어뎁터에서 리스트뷰로 그렇게 알려주면 리스트뷰가 다시 업데이트 한다며!!!!!!... 이잉 ㅜㅜ... 파닥파닥 (억울함에 팔다리를 마구 허우적 거리고 있다.)





결론은 그냥 처음부터 방법을 잘못 안 거다. CursorAdapter라면 바뀐 cursor로 adapter의 내용물을 바꿔주면 되는거다. 이런 어이없는 삽질을 반복하는 나도 슬프지만, 혼자 찾아가며 안드로이드 프로그램을 개발하는 사람들 중 비슷한 과정을 겪는 사람들도 꽤 많은 듯 하여 스스로를 위로하고 넘어가기로 했다.










하지만 여전히...















from tumblr


슬프옹...

(몇 시간을 날린 것인지...)