简体   繁体   中英

LazyColumn to not recompose some items

With RecyclerView , I can make some ViewHolder not recyclable (follow some answers in I want my RecyclerView to not recycle some items ).
Can I make LazyColumn to not recompose some items (similar to make RecyclerView don't recycle some ViewHolder )? I have few items in LazyColumn with some big images, it recompose after scrolling down and up so scroll is not smooth.

I met the same problem and use Column instead with a modifier vertical scroll. If you don't want it recycle view, just load all ( few items)

Column(
            modifier = Modifier
                .constrainAs(listView) {
                    top.linkTo(
                        parent.top
                    )
                }
                .fillMaxSize()
                .verticalScroll(rememberScrollState())
        ) {
            list.forEachIndexed { index, itemModel ->
               ItemView(itemModel, index) {
                    // on item click
                }
            }
            Spacer(modifier = Modifier.height(40.dp))
        }

I had a similar issue with a composable that is heavily manipulating bitmaps and then draw them on a canvas. You noticed that processing while scrolling the lazyColumn up and down.

To face this issue a stored my manipulated bitmaps in a List<ImageBitmap> as rememberSaveable

val rememberFruits by rememberSaveable(images) {         
    mutableStateOf(doBitmapOperations(images))
}

Canvas(
    modifier = Modifier
        .fillMaxWidth()
        .height(height)
        .constrainAs(circle) {}
) {
    rememberFruits
        .forEach { createScaledImageBitmap ->
            val (image, offset) = createScaledImageBitmap
            drawImage(
                image = image,
                topLeft = offset
            )
        }
}

My item in the lazyColumn was still recomposed but the heavy bitmap operations were no more executed while scrolling and making scrolling up and down smooth.

hope it helps!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM