본문 바로가기

프로그래밍 일반/안드로이드

requestLayout() improperly called glide

리싸이클러뷰에서 채팅기능을 구현하다가 이미지를 삽입하는데 아래와 같은 문구가 떴다.

requestLayout() improperly called by android.widget.TextView{...}

정확히는 Glide의 기능을 사용했을 때 문제가 됬는데, 왼쪽과 같이, 한번만 View를 인식하고 그 다음부터는 인식하지 못 했다. 그리고 오른쪽에 내가 보낸 메시지의 사진은 제대로 인식했다.(참고로 여자꼬마아이가 null값일때 반환하는 그림이다).

원인 :

Glide.with(getApplicationContext())
.load(item.getImage())
.into(imageView);로선언해서 문제였다.

ApplicationContext는 앱자체에다가 내가 이미지를 뷰로 바꿔달라고 부탁하는 것이다. 액티비티와 상관없이 동작하므로, 최상위급이라고 보면 된다. getApplciationContext나 this로 쓰이는 Activity Context나 둘 다 Context를 상속받았지만, 뷰랑 관련된 관리는 App이 아니라 Activity에서 하므로, Activity를 Glide의 매개변수로 주어야 했다.

해결책 : 

Glide.with(this)
.load(item.getImage())
.into(imageView);

 

채팅에서 Class를 따로 생성해서,  Glide를 넣다보니깐 Glide가 Activity를 인식하지 못 하였다. 그래서 외부에서 Activity를 집어넣어서 Glide가 인식하게 만들었다.

이거 해결하는데 8시간 걸린듯... getApplicationContext()도 텍스트는 되고, 일부 사진은 되니깐 문제를 놓을 수 없었다... 눈물이 난다... 

 

참고자료 : 

http://dev.youngkyu.kr/36

 

 

위에 사진은 버그가 났을 때 사진이다. 첫사진만 제대로 Glide가 처리하고, TExt는 전부 제대로 처리한다. 오른쪽(내가 보낸 메시지 사진)은 전부 제대로 처리된다.

아래 사진은 버그를 해결했을 때이다. getApplicationContext()와 activity를 구분해서 써야됬다... 눙물