Primary/Compose

[Compose] LazyList에서 아이템을 추가했을 때 스크롤 위치를 기억하는 방법

해스끼 2022. 12. 14. 16:25

``LazyColumn``에서 리스트 앞에 아이템을 추가하면 스크롤 위치가 위로 올라가 버린다.

스크롤 위치를 기억하고 싶다면 아이템의 ``key``를 설정해야 한다. 공식 문서에는 다음과 같이 적혀 있다.

When you specify the key the scroll position will be maintained based on the key, which means if you add/remove items before the current visible item the item with the given key will be kept as the first visible one.

당연히 key는 유일해야 한다. 가장 쉬운 구현 방법은 아마도 ``hashCode()``일 것이다.

val items: List<Item> = ...

LazyColumn(
    modifier = modifier
        .fillMaxWidth(),
    state = screenItemsState,
) {
    items(
        items = items,
        key = { item -> item.hashCode() }
    ) { ... }
}

리스트가 꽉 찬 후에만 스크롤 위치가 정상적으로 보존된다.

 

리스트가 꽉 차기 전에는 보존할 수 없는 건가? 내가 잘못 구현한 건가... 나중에 답을 알게 되면 수정하겠다.