Jetpack Compose LazyColumn에서 스크롤이 포커스를 못따라가는 이슈

hyeon·2023년 8월 28일
0

Android

목록 보기
2/2

- 상황 :

Jetpack Compose에서 focus에 따라 vertical로 scroll이 되도록 만들어진 LazyColumn.

  1. 맨위 맨아래로 이동할 때 간헐적으로 스크롤이 되지않는 현상(맨위 맨아래의 item이 보이지 않은 상태에서 스크롤이 마무리됨)
  2. D-Pad를 Long press 했을 때 재현되는 것으로 예상되지만 이 또한 100% 재현 되지 않음.

- 트러블 슈팅

  1. focus가 LazyColumn 바깥으로 나간다고 예상

    • 필요없는 Row나 Column 삭제
    • 레이아웃 구조도 그린 후 확인 → 이상 없음
  2. focus가 맨위, 맨아래까지 내려가지 않는다고 예상

    • onfocuschanged에서 focus의 log 찍어 봄 → items의 사이즈 만큼 모두 focus가 됨
    • 다만 처음 화면에 들어올 때 focus가 없는것으로 보이나 클릭 시 첫번째 아이템을 클릭한것과 같은 결과가 나타남. UI상 갱신이 이루어지지 않는것일 뿐 focus는 첫번째 아이템에 있다고 생각 → 처음 화면 상태에서 D-Pad Down 버튼을 눌러도 첫번째 item에 focus가 관측됨.
    • 강제로 index가 0이되면 0으로 스크롤하는 scrollToItem 사용 → 여전히 Issue 재현 됨
  3. focus가 변하는 속도를 scroll이 따라가지 못한다고 예상

    • LazyColumn 함수를 까봤더니 initialFirstVisibleItemIndex 를 기준으로 State를 remeber하는 것 같음. 만약 focus가 빨리 변하고 scroll이 느리게 변하여 visible 아이템이 정확하지 않다면 해당 이슈가 발생할 수 있을 것이라고 예상
    • 공식문서에서 다른 함수 수색 → TVLazyColumn이 따로 있다는 것을 발견
    • 공식문서 Jetpack - Tv 라이브러리에서는 이미 아래와 같은 문제가 발생한다는 것을 고지하고 1.0.0 alpha01 버전 출시. 알려진 문제
      • 스크롤하는 컨테이너가 포커스를 얻으면 기본적으로 첫 번째 요소는 포커스를 얻지 않습니다.
      • LazyColumnLazyRows포함된 항목에서 수직으로 스크롤하면성능이 저하됩니다.
    • 낮은 버전에서는 error가 뜨고 1.0.0 alpha05버전 부터 정상적으로 실행이 된다.
    java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/compose/foundation/lazy/layout/PinnableParent;
profile
남기고 싶은 개발자입니다 :>

0개의 댓글