안드로이드 개발 질문/답변
(글 수 45,052)
커스텀 어댑터를 만드려고 하는데 bindView와 newView와 getView의 차이점을 알수가 없네요,..
디버깅 모드로 호출 순서를 보면 getView 다음 newView 다음 bindView를 호출하더군요,,,
그럼 제일 마지막인 bindView에다가만 원하는 구조를 코딩하면 되는 것 아닌가요>? 누가 속시원히 말씀좀 해주셨으면...
디버깅 모드로 호출 순서를 보면 getView 다음 newView 다음 bindView를 호출하더군요,,,
그럼 제일 마지막인 bindView에다가만 원하는 구조를 코딩하면 되는 것 아닌가요>? 누가 속시원히 말씀좀 해주셨으면...
2011.11.23 09:39:58
글은 오래됐지만.. 검색해서 들어오시는 분들이 계실 것 같아서 댓글 달아요~
간단히 말씀드리면 getView는 newView와 bindView를 모두 호출하는 함수에요.
아래 CursorAdapter 코드를 보시면 알수 있는데,
ListView 아이템을 보여줄때 계속해서 getView를 호출하게 되죠 (스크롤해서 움직여도 계속 호출..)
근데 아이템의 View는 안 바뀌는데 계속 가져올 필요는 없으니 View가 처음 보여질때 즉 null인 경우 newView를 통해 view를 생성합니다. 그리고 나서 bindView를 호출하죠.
이후에 스크롤해서 화면을 이동했다가 다시 해당 아이템이 화면에 보여질때는 이전에 newView를 통해 생성한 view가 있으니 bindView만 호출하고요.
따라서 getView내부에 모든 코드를 넣어두거나 newView, bindView만 구현하고 getView가 알아서 처리하게 할 수 있죠
모든 어댑터가 getView, newView, bindView를 호출하나 보죠? 처음 알았네요.. ㅋ;;
저는 일반 어댑터(ArrayAdapter)은 getView만 사용하고 CursorAdapter는 newView와 bindView를 사용하는 줄 알았거든요..
근데 생각해보면 getView, newView, bindView가 각각 parameter로 받는 것들이 다르니 각각 상황에 맞게 알맞게 사용해야 한다가 맞지 않을까 싶네요..
ArrayAdapter를 사용하는데 bindView가 호출된다고 해도 Cursor를 사용하지 않는 이상 굳이 bindView를 사용할 필요가 있나 싶네요..
하지만 굳이 사용하겠다고 하면 에러만 발생하지 않으면 말릴 사람은 없어 보입니다..
파일을 다루다 어떤 Stream을 사용해야 하나 하고 고민하다 내린 제 결론이죠.. 비슷한 것들이 있고 어떤 것을 사용해도 무방하다면 상황에 맞는 것을 사용하는게 맞다라는게 제 생각입니다..