我正在学习作文。
文章告诉我:
添加到Bundle中的所有数据类型都会自动保存。最简单的解决方案是向对象添加@Parcelize注释。
它给了我示例代码
@Parcelize
data class City(val name: String, val country: String) : Parcelable
@Composable
fun CityScreen() {
var selectedCity = rememberSaveable {
mutableStateOf(City("Madrid", "Spain"))
}
}
下面的代码来自项目:
我发现data class Post
不加@Parcelize
,val featured = remember { PostRepo.getFeaturedPost() }
是可以的,为什么?
@Composable
fun Home() {
val featured = remember { PostRepo.getFeaturedPost() }
val posts = remember { PostRepo.getPosts() }
...
}
object PostRepo {
fun getPosts(): List<Post> = posts
fun getFeaturedPost(): Post = posts.random()
}
@Immutable
data class Post(
val id: Long,
val title: String,
val subtitle: String? = null,
val url: String,
val metadata: Metadata,
@DrawableRes val imageId: Int,
@DrawableRes val imageThumbId: Int,
val tags: Set<String>
)
@Immutable
data class Metadata(
val author: PostAuthor,
val date: String,
val readTimeMinutes: Int
)
@Immutable
data class PostAuthor(
val name: String,
val url: String? = null
)
虽然remember
帮助您在重组中保留状态,但在配置更改中不能保留状态。为此,使用rememberSaveable
。RememberSaveable
自动保存任何可以保存在Bundle
中的值。对于其他值,您可以传入自定义保存程序对象。
由于RememberSaveable
自动保存任何可以保存在Bundle中的值,因此它要求类为Parcelable
,而不像记住的那样。