Notice
Recent Posts
Recent Comments
Link
관리 메뉴

설.현.아빠

ListView 향상 버전 Review 본문

안드로이드/List

ListView 향상 버전 Review

설.현.아빠 2011. 4. 13. 09:27



예전에 보았던 부분인데...지금보니 새롭네..


다시 한번 디테일하게 분석을 해보자.


이 속도향상의 메인 이슈는 setTag(), getTag()이다.


View안에 데이터를 저장할때 setTag(), getTag()를 사용한다.


간단한 사용법(http://cafe.naver.com/aphone.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=5381&social=1)


음....객체를 저장한다. 아래 코드를 보면 row.setTag(wrapper); 구문이 있다. 즉 wrapper라는 이름의 객체를 저장한다는 뜻이다.


어디에?? row라는 View에^^


먼저 wrapper가 어떤 객체 인지부터 보자.



보면 알겠지만 3개 TextView의 객체생성 및 리턴해주는 함수를 포함하고 있는 Class이다.





여기서 알아야 할것들은 convertView란 무엇인가!!! convertView에는 이전에 생성된 View인스턴스 즉, 이전에 생성된 row를 가리킨다.


물론 convertView가 null이라면 이전에 getView를 통해 생성된 row가 없다는것이고...처음 실행했다는것이다.


row가 null이라면 row를 생성해 주어야 겠지? inflate를 통해 row를 생성해주고 그 값을 ViewWrapper로 넘겨준다.


그럼 ViewWrapper는 row객체를 넘겨받았을 것이고, 이 ViewWrapper를 setTag를 통해 저장을해둔다.


물론 바로 아래 보면 넘겨받은 row객체의 TextView 3개의 텍스트를 지정해주는 부분도 포함되어 있다.


이렇게 하나의 행을 만들었고, 두번째 행, 세번째 행....을 만들어나간다.


이미 생성을 한 뒤에는 convertView는 null이 아닌 값이 되므로 wrapper = (ViewWrapper)row.getTag(); 를 통해 저장된 객체를 읽어와서


해당 객체에 TextView들을 텍스트로 채우고 새로운 행을 생성한다.



로그를 찍어보면 처음 실행시 row가 null임을 체크하고 행들을 쭉~~~생성한 후에 이미 생성된 행들은 null과 같지 않음을 체크하여


getTag를 통해 이미 저장된 객체를 가져옴을 확인 할 수 있다.




결론은!!!! 차이를 확인하기 위해선 대량의 데이터를 저장한 후 Load해보면서 시간체크를 하는...번거로움에 그냥 좋아졌으려니 한다^^





관련 포스트 (http://dodo4989.tistory.com/184)



Comments