Epoxy의 스크롤이 긁혀서 재활용이 안 됐는지 알아봤어요.
5912 단어 RecyclerViewAndroidepoxy
계기
페이지의 첫 번째 표시 속도를 높이기 위해 Epoxy의 RecyclerView(이하 Epoxy) 재구성을 사용했습니다.
대상 페이지의 구성은 여기에 있습니다.root는 Linearlayout 아래에 몇 개의 보기가 걸려 있습니다.LinearLayout // rootのViewGroup
∟ RecyclerView
∟ RelativeLayout
∟ RecyclerView
∟ RecyclerView
∟ LinearLayout
∟ ...
LinearLayout // rootのViewGroup
∟ RecyclerView
∟ RelativeLayout
∟ RecyclerView
∟ RecyclerView
∟ LinearLayout
∟ ...
LinearLayout을 Epoxy로 전환
EpoxyModelWithHolder
확장된 클래스로 이동동작 테스트
Eppxy가 ViewPool을 관리하는 곳입니다.
ActivityRecyclerPool.kt
internal class PoolReference(
context: Context,
val viewPool: RecyclerView.RecycledViewPool,
private val parent: ActivityRecyclerPool
) : LifecycleObserver {
private val contextReference: WeakReference<Context> = WeakReference(context)
val context: Context? get() = contextReference.get()
RecyclerView에서 ViewPool에서 캐시 코드 가져오기
RecyclerView.java
// この辺りでキャッシュを探しているようです(おそらく)
ViewHolder getScrapOrHiddenOrCachedHolderForPosition(int position, boolean dryRun) {
final int scrapCount = mAttachedScrap.size();
// 省略..
final int cacheSize = mCachedViews.size();
for (int i = 0; i < cacheSize; i++) {
final ViewHolder holder = mCachedViews.get(i);
원인
지원
총결산
참고 자료
Reference
이 문제에 관하여(Epoxy의 스크롤이 긁혀서 재활용이 안 됐는지 알아봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yst_i/items/8853249e365263577135텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)