아오 마음 속 깊은 곳으로부터의 빡침을 느끼며... 나 이런 험한 말 자꾸 쓰면 안되는데, 쓸데없는 삽질을 연 이틀 하고 나니 마음에서 욕이 우러나옴...-_- 으아랏!!!
현재 개발 중인 프로그램 내에 GridView를 사용할 일이 생겼다. 음 일반적으로 리사이클을 위해 사용하는 ViewHolder 형식을 활용했다.
그런데 이노무 것이. 자꾸 첫 번째 칸이 안 나와. 왜. 어째서. 와이. 나니데. 나제. 왓. 시험 삼아 ViewHolder 재활용을 안 하고 매번 new로 만들어주니 문제가 생기지 않는다. 그러니까 ViewHolder 재활용 중에 생기는 문제란 말이지. 근데 어째서 생기는 거냐고. 크흡. 구글링을 시작했는데, 비슷한 질문이 가끔 보인다. 그런데 뭔가 명확한 답이 없다. 그러던 중 어떤 답변에 이게 있었다.
I had the exact same problem and fixed it by removing/modifying GridView.LayoutParams.
어엉? 정말? 시험삼아 해본다.
기존 코드
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(v == null){
viewHolder = new ViewHolder();
...
v.setLayoutParams(new GridView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
v.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder)v.getTag();
...
}
...
수정 코드
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(v == null){
viewHolder = new ViewHolder();
...
v.setLayoutParams(new GridView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
v.setTag(viewHolder);
}
else {
v.setLayoutParams(new GridView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
viewHolder = (ViewHolder)v.getTag();
...
}
...
수정 하고 나서 빌드해서 돌려보니, 첫번째 칸이 이상 없이 잘 나온다. 얼쑤 절쑤 ㅠㅠㅠ 덩더쿵덩기덕쿵덕짜랍자아ㅓ라ㅓㅏㅓ냐....?...
왜 ViewHolder 재활용 중에 이런 문제가 생기는 지는 안드로이드 코드를 붙여서 분석해봐야 알겠지만, 일단... 하아.. 삽질을 멈추고 다음 코딩으로 넘어갑시다. 답변 주신 분 감사합니다. 스택오버플로우 알럽유.
'관계, Networking 그리고 Programming' 카테고리의 다른 글
재미있는 에러 하나. Spinner의 높이가 제대로 안 잡히네. (2) | 2014.11.27 |
---|---|
아으나저으어으익!!!!!!!!!!!!! (0) | 2014.10.07 |
NDK를 활용, 라이브러리 만들기 2 : 기본적인 동작 테스트 (7) | 2014.01.20 |
NDK를 활용, 라이브러리 만들기 1 : 환경 설정 (0) | 2014.01.20 |
프로가드로 빌드한 앱 에러시 에러 위치 확인 (0) | 2014.01.17 |