3

Preference item 클릭 효과 만들기

안드로이드 리스트의 경우에는 간단히 list.setSelector를 해주면 아이템 클릭 효과를 줄 수 있다. 뿐만 아니라 Preference에서도 비슷하게 사용 할 수 있는데, getListView를 한 뒤 리스트처럼 사용하면 아이템 클릭시 효과를 얻을 수 있다. 하지만 언제나 어려운 문제는 발생하는 법. 만약 Preference를 오버라이드(Override)한 다면 어떻게 처리 해야 할까? 오버라이드를 했으니 메인 프리퍼런스 액티비티가 어찌 손을 쓸 수도 없고... 오버라이드한 프리퍼런스에서 getListView를 하기도 그렇고... 그럼 도데체 이 리스트 아이템을 어떻게 가져 올 거냐? 여기 저기 검색을 해봐도 오버라이드 되지 않은 프리퍼런스의 아이템에 대한 얘기 밖에 없다. 그럼... 어차피 새로 ..

비동기 작업은 아버지가 살아있을 때 해라!

일반적으로 뷰 속에 버튼등을 넣을 수 있다. 그리고 이 뷰를 오버라이드 하면 새로운 커스텀 뷰를 만들수도 있다. 그러나 조심해야 할 점이 있으니... 뷰는 닫히면 사라진다. 만약 닫을 때 제거 하지 않으면 다음에 열 때 '니 자식의 애비가 살아 있으니 애비를 저리 치우고 다시 나와라'라는 말을 듣게 될 것이다. 즉, 무조건 제거를 해주어야 하는데 여기서 문제가 발생한다. 비동기 태스크가 문제다... 얘는 뷰가 닫혀도 언제든 갑자기 툭하고 나와서 실행 될 수 있다. 해당 클래스에 있다고 무심결에 이 뷰를 불러다 쓰면 죽느다. 이건 문제가 참 쉽다. 하지만 뷰 속에 있는 아이템을 불러다 쓰면 살아 있을 수도 있다. 뷰만 제거 하고 속 살은 제거 하지 않았기 때문에 아직 가비지 청소가 되지 않았다면 속살은 살..

당신은 반드시 아이의 부모를 먼저 제거 해야 합니다?

오버라이드를 하다 보면... 또는 여러가지 뷰 작업등을 하다 보면 저런 경고 아니... 죽여 놓고 내 뱉는 문장을 만나게 된다. 유아이가 정말 복잡하게 되어있자면... 정말 난감하기 따름이 없을 것이다. 이번엔 Preference Override 에서 발생하는 문구에 대해 보겠다. 그냥 답만 내 놓자. onCreateView를 통해 1개만 만든다면 문제 없지만, 여기에다가 onCreateDialogView까지 만들게 되면 다음에 뷰를 띄울 때는 반드시 죽여야 한다. 그러지 않으면 아래 뻘건 문구와 함께 앱이 죽어 있을 것이다. java.lang.IllegalStateException: The specified child already has a parent. You must call removeView(..