- 상황 :
Jetpack Compose에서 focus에 따라 vertical로 scroll이 되도록 만들어진 LazyColumn.
- 맨위 맨아래로 이동할 때 간헐적으로 스크롤이 되지않는 현상(맨위 맨아래의 item이 보이지 않은 상태에서 스크롤이 마무리됨)
- D-Pad를 Long press 했을 때 재현되는 것으로 예상되지만 이 또한 100% 재현 되지 않음.
- 트러블 슈팅
-
focus가 LazyColumn 바깥으로 나간다고 예상
- 필요없는 Row나 Column 삭제
- 레이아웃 구조도 그린 후 확인 → 이상 없음
-
focus가 맨위, 맨아래까지 내려가지 않는다고 예상
- onfocuschanged에서 focus의 log 찍어 봄 → items의 사이즈 만큼 모두 focus가 됨
- 다만 처음 화면에 들어올 때 focus가 없는것으로 보이나 클릭 시 첫번째 아이템을 클릭한것과 같은 결과가 나타남. UI상 갱신이 이루어지지 않는것일 뿐 focus는 첫번째 아이템에 있다고 생각 → 처음 화면 상태에서 D-Pad Down 버튼을 눌러도 첫번째 item에 focus가 관측됨.
- 강제로 index가 0이되면 0으로 스크롤하는
scrollToItem
사용 → 여전히 Issue 재현 됨
-
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;