RecyclerView 5

[안드로이드] ExoPlayer 깜빡거리거나 검은 화면(Black screen)이 뜰 때

문제발생 Epoxy로 무한 반복되는 배너 캐러셀에 동영상을 적용시키는 중에, 간혹 동영상이 재생될때 검은 화면만뜨고 재생이 안되거나 깜빡이는 문제가 있었다. *하나의 ExoPlayer를 RecyclerView.Adapter에서 재활용해가면서 쓰는 사례다. 정신차리고 setPlayer() Document를 자세히 읽어보니... Player를 다른 View에 붙일때 switchTargetView()를 쓰는걸 추천한다고 되어있다. 하지만 setPlayer()를 직접 쓰고자 할 경우 이전 View에서 Player를 분리하기 위해 setPlayer(null)을 호출하기 이전에 새로운 View에 Player를 연결시켜야 한다. *switchTargetView를 직접 써보려고 했으나, 지원하지 않는 메소드였다. 해결..

[안드로이드] java.lang.IllegalStateException: An instance of OnFlingListener already set 해결

문제 발생 @ModelView(autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT) internal class PagerSnapHelperCarousel @JvmOverloads constructor( context: Context ) : Carousel(context) { init { if (onFlingListener == null) { PagerSnapHelper().attachToRecyclerView(this) } } } Epoxy의 Custom Carousel로 SnapHelper를 붙이는 도중 OnFlingListener가 이미 등록되어있다는 오류가 발생했다. 당연하게도 이유는 RecyclerVIew에 OnFlingListener가 이미 등록되어 있어..

[안드로이드] Airbnb Epoxy 라이브러리 놓치기 쉬운 부분들

개발중인 앱에서 RecyclerView는 Epoxy를 사용하고 있는데 상당히 편리함을 누렸지만 제대로 알지못하고 있는거 같아서 공식문서를 쭉 훑어보았다. 이번 글에서는 공식 문서와 소개 페이지에서 설명하고 있는 요소들 중에서 놓치기 쉬웠던 부분들 몇가지를 체크하려한다. EpoxyAttribute EpoxyAttribute를 사용하면 자동 Diffing에 사용되는 hashCode()나 equals() 같은 메소드가 생성되는데, 이를 원하지 않는다면 @EpoxyAttribute(hash=false) 로 꺼둘 수 있다. 클릭 리스너처럼 매번 bind 될때마다 재생성되는 필드들에 적용하면 좋다. Hiding Models View가 조건부로 보여지고 숨겨져야할때 사용할 수 있다. model.show(boolean..

[안드로이드] RecyclerView를 잘 사용하기 위한 팁들.

ListView가 널리 쓰일때부터 RecyclerView, 그리고 지금은 DiffUtil을 이용한 ListAdapter를 사용하기 까지! 수 년간 안드로이드를 개발해왔는데, RecyclerView에 대해서 계속 당하기만 한 기억뿐이다. 잘몰라서 그렇다. 그래서 이번에 RecyclerView에대해서 공부 할 거리를 찾아보다 발견한 짧은 글을 간단히 번역해 보기로 했다. 원문: proandroiddev.com/recyclerview-pro-tips-part-1-8a291594bafc 1. 런타임에 RecyclerView 내의 아이템 크기가 변하지 않는다면 setHasFixedSize(true)를 사용해라. RecyclerView 내의 아이템의 높이가 모두 균일하다면 RecyclerView.setHasFixe..