Jetpack Compose — NestedScrollHorizontalView — 2편Saver | Por Wolf Android Developer | Abril de 2022


#2 Ahorro
Crear NestedScrollHorizontalView no es fácil
¡Hola!
Siguiendo con el artículo anterior Parte 1 Animable, ¡el tema de este artículo es «Ahorro»!
Si no ha leído la Parte 1, le recomendamos que vea la Parte 1 primero 🙂
Entonces, ahora, ¡veamos por qué usamos «Saver» y qué hace!

ahorrar dinero/tiempo/ahorrar/ahorrar cosas
Todavía no sé qué es un Saver, pero me gustaría dejar que Saver administre mi factura de alimentos durante un mes 🙁
Así que ahora veamos cómo se indica en la documentación oficial para desarrolladores de Android.

A continuación están mis selecciones para «Ahorro».
- Convierte un objeto en algo almacenable.
- El tipo de guardado sigue a SaveableStateRegistry.
- Todos los tipos que se pueden guardar en un paquete se pueden guardar en un protector.
- Si el valor se puede guardar se puede comprobar con canBeSaved.
- Saver se puede pasar como el parámetro de RememberSaveable.
He oído hablar de él, pero hay muchas cosas de las que no estoy seguro.
Vamos a averiguar.
Registro estatal salvable
https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/SaveableStateRegistry
Se dice que la función guarda y restaura el estado usando el mecanismo de estado que guarda una instancia de un componente (Compose tiene un estado para cada función @Composable, por lo que puede ser una característica muy útil)
=> ¡También puede ver una función llamada canBeSaved en la selección! Se dice que devuelve verdadero si el valor se puede almacenar con este amigo.
manojo
https://developer.android.com/reference/android/os/Bundle
- Usamos mucho los paquetes, pero no necesitamos recordar todos los tipos que almacenamos. ¡Porque tenemos autocompletar!

어후.. 근데 작성 할 내용이 너무 많습니다. 우리 궁금하면 공식 문서에서 찾아 보는걸로 해요 :)
Recuerda guardar
https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#rememberSaveable(kotlin.Array, androidx.compose.runtime.saveable.Saver, kotlin.String, kotlin.Function0)

RememberSaveable es un poco diferente de la función de recordar que uso mucho.
En Compose, a menudo usamos la función de recordar porque la función @Composable tiene una función de recomposición.
Voy a explicar la función de recordar!
Las funciones @Composable tienen estado.
Si una función @Composable cambia el estado como un elemento externo, se produce la reorganización, la representación y el repintado de la vista.
En este punto, no desea inicializar la variable solo porque se vuelve a representar, pero tenga en cuenta lo que puede usar.
¡Puede usar la función de recordar para guardar el estado de una variable!
@Composable
fun TestFuntion(){
// 리 컴포지션 될 때마다 count 변수가 0으로 초기화됨.
val count = 0
)@Composable
fun TestFuntion(){
// 리 컴포지션 되어도 count 변수가 유지됨.
val count = remember { 0 }
}
Luego volvemos a recordar Saveable
De acuerdo con la traducción de Papago anterior, el estado puede persistir en caso de cambios en la configuración de la pantalla o muerte del proceso.
Y la asignación también puede guardar el estado de la variable en forma de paquete.
¡si! , ¿qué pasa con una variable de un tipo que no se puede almacenar?
* Paquete
* protector de mapa
* ¡Se puede guardar como ListSaver!
formulario de protección
https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/package-summary#autoSaver()
Conocí a un amigo llamado Saver en algún momento.
Si sacamos la conclusión de lo anterior,
«Ahorro» se puede proporcionar como un argumento para recordar Guardarable,
Puede guardar datos en forma de Bundle, Parcelize, MapSaver o ListSaver.
¡concentración! ahora es dificil 🙁

Ahora, recordemos lo que vimos en la Parte 1.
El siguiente proceso se repite rápidamente a medida que el usuario se desplaza por la pantalla.
- detener la animación -> guardar el valor de compensación -> iniciar la animación
Bueno, si cambia la información de compensación en una función @Composable con estado, por supuesto que ocurrirá la refactorización, ¿verdad? Así que uso un tipo llamado ListSaver para los valores que cambian. [ offset, maxOffset ] Decidimos mantener la información junta.
(explicado debajo del código)
save = {} // convierte el valor en una lista almacenable
restaurar = {} // Convierte el valor restaurado a la clase original
- Primero, vamos a crear un Saver en forma de listSaver, que se proporcionará para RememberSaveable (offset, maxOffset).
- El valor a restaurar también se denomina valor guardado.eso[0]eso[1]
- Devuelve ScrollState para aplicarlo a NestedScrollHorizontalPager.
- Ahora que podemos capturar el desplazamiento de desplazamiento a medida que el usuario se desplaza, todo lo que queda es redefinir el nestedScrollConnection.
La razón para redefinirlo es que conocemos el valor de compensación y necesitamos redefinir el evento de desplazamiento para eliminar o mostrar el contenido superior. - Entonces, el siguiente artículo es sobrescribir el evento NestedScrollConnection().
Cuando escribí sobre el tema «Ahorro» de esta publicación, parecía que había muchas partes que la gente no entendería cuando las viera.
Si tiene alguna pregunta sobre el contenido de las Partes 1 y 2, déjela en los comentarios. 🙂