为什么当我尝试存储状态时对象不需要添加@Parcelize?



我正在学习作文。

文章告诉我:

添加到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帮助您在重组中保留状态,但在配置更改中不能保留状态。为此,使用rememberSaveableRememberSaveable自动保存任何可以保存在Bundle中的值。对于其他值,您可以传入自定义保存程序对象。

由于RememberSaveable自动保存任何可以保存在Bundle中的值,因此它要求类为Parcelable,而不像记住的那样。

相关内容

  • 没有找到相关文章

最新更新