- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个搜索 View 可以正常工作,但没有将用户输入保留在后退导航(从详细 View )。根据Keep text in BasicTextField on back navigation ,我所要做的就是改变
remember
到
rememberSaveable
像这样:
val textState = rememberSaveable { mutableStateOf(TextFieldValue(""))
但现在我明白了。
Compose 运行时内部错误。意外或不正确地使用 Compose 内部运行时 API(未应用待处理的组合)
TopAppBar(
elevation = 0.dp,
title = {},
navigationIcon = {
IconButton(onClick = {
scope.launch {
scaffoldState.drawerState.open()
}
}) {
Image(
//some image gere
)
}
},
backgroundColor = backgroundColor,
actions = {
val textState = rememberSaveable { mutableStateOf(TextFieldValue("")) }
CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {
SearchView(state = textState, viewModel)
//rest of code
和搜索 View (为简洁起见进行了编辑):
@Composable
fun SearchView(state: MutableState<TextFieldValue>, viewModel: viewModel) {
val interactionSource = remember { MutableInteractionSource() }
BasicTextField(
value = state.value,
onValueChange = { value -> state.value = value; viewModel.search(state.value.text)} ,
// rest of code
这个错误已经在 stackoverflow 上讨论过,但与 rememberSaveable 无关,而且那里也没有提供任何解决方案。
编辑:我通过使用保存到 View 模型中的搜索文本初始化 textState 解决了这个问题。工作正常,但我没有提供这个作为我自己问题的答案,因为它是一个 hack,但不是真正的解决方案。至少现在,如果有一个真正的解决方案。但如果这最终证明是 Compose 中的错误,那么我想这将是一个答案。
val textState = remember {mutableStateOf(TextFieldValue(viewModel.filter)) }
最佳答案
我不确定你为什么会有这个,也许你必须检查你的 compose 依赖版本?
但是你实际遇到的错误是
MutableState containing TextFieldValue(text='', selection=TextRange(0, 0), composition=null) cannot be saved using the current SaveableStateRegistry. The default implementation only supports types which can be stored inside the Bundle. Please consider implementing a custom Saver for this class and pass it as a stateSaver parameter to rememberSaveable().
你必须创建一个 saver
因为 rememberSaveable
是在配置更改后仍然存在的东西,并且你必须告诉 saver 它将如何保存某些数据结构
并恢复
它。
It behaves similarly to remember, but the stored value will survive the activity or process recreation using the saved instance state mechanism (for example it happens when the screen is rotated in the Android application).
@Composable
fun <T> rememberSaveable(
vararg inputs: Any?,
stateSaver: Saver<T, out Any>,
key: String? = null,
init: () -> MutableState<T>
): MutableState<T> = rememberSaveable(
只需创建一个自定义保护程序
val textFieldValueSaver = run {
val textKey = "text"
mapSaver(
save = {
mapOf(textKey to it.text)
},
restore = {
TextFieldValue(it[textKey] as String)
}
)
}
然后将它传递给 rememberSaveable 的 stateSaver 参数
val textState = rememberSaveable(
stateSaver = textFieldValueSaver
) { mutableStateOf(TextFieldValue("")) }
关于android - Jetpack 组成 : Pending composition has not been applied when rememberSaveable is used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74711181/
有没有一种简单的方法可以在 compose 中删除开关的内部填充? 我尝试在其修饰符中提供 0.dp,但它并没有摆脱内部填充 Switch( modifier = Modifier
我正在使用底部导航栏,每个菜单都会将用户导航到特定的可组合屏幕。我使用导航库来管理它们之间的导航。 我为所有可组合项使用一个通用的 ViewModel。我在其中一个可组合项中使用惰性列,当我通过单击底
我在撰写屏幕中有一个 TextField 和一个 ModalDrawer。我想在用户打开抽屉时关闭软键盘,但我一直无法弄清楚如何。在 ModalDrawer afaik 中没有触发 onOpened
我一直在搜索文档,但找不到确认。有谁知道navigation和 compose来自 Android Jetpack 的组件彼此兼容吗? 我知道Jetpack Compose尚未准备好生产,仅处于开发人
我正在尝试将我的应用程序更新为新的撰写版本,但它给了我一个我不知道如何修复的错误。当我运行时,错误仍然存在于我的运行中。我的旧项目正常工作,但我想要的是更改版本,如果有人可以帮助我,我将不胜感激
我有这样的用户界面: val scrollState = rememberScrollState() Column( modifier = Modifier
有没有办法在 Compose 中的列表(列/行)更改上获得动画效果,看起来类似于带有 setItemAnimator 的 recyclerview 动画? 最佳答案 目前没有办法用 LazyColum
我想隐藏状态栏,我已经使用伴奏库做到了这一点: val systemUiController = rememberSystemUiController() systemUiController.isS
我想隐藏状态栏,我已经使用伴奏库做到了这一点: val systemUiController = rememberSystemUiController() systemUiController.isS
使用 Android View,我可以像这样将焦点移动到 View: fun View.requestAccessibilityFocus() { requestFocus() sen
我正在尝试在我的 Android 应用程序中使用 Jetpack Compose 播放视频。要使用 ExoPlayer 进行流式传输,但我真的不明白如何实现全屏按钮,有什么建议吗? @Composab
通常可以使用修饰符将不同的形状分配给可组合项,但在此可组合项中没有这样做。 我希望图像中标记的部分是一个圆圈 你可以在下面看到我写的代码 @Composable fun StandardCheckbo
Jetpack compose 提供了很多 Material 组件,如 TextField 等。 然而,要构建类似文件编辑器的东西,可以使用什么样的组件来支持多行文本任意长的文本操作,如选择文本、剪切
我们可以使用 Scaffold 在 JetpackCompose 中使用抽屉导航如下 Scaffold( drawerContent = { Text(text ="Drawer") } )
对不起,我几乎不会说英语。 机器翻译: 如何为 Jetpack Compose 设置阴影颜色? 我可以设置阴影,但它们很难看。 Jetpack Compose 代码: Surface( mod
我正在开发一个小型 jetpack-compose 演示聊天应用程序。所以我需要在底部有一个带有 TextField 和一个要发送的按钮的栏,就像在 WhatsApp 中一样......我认为最好使用
我正在 Jetpack Compose Desktop 中创建一个应用程序,它将接受用户输入,在用户重新打开应用程序后,输入值应该在那里。我的意思是,在用户重新打开应用程序后,用户给定的数据应该在那里
描述 在 SnackbarHostState 上调用 showSnackbar 并传递 duration 参数不会关闭 Snackbar。协程似乎无限期暂停。 重现步骤: val snackbarHo
谁能建议如何在 Jetpack Compose Navigation 的不同部分共享 ViewModel? 根据文档,viewModels 通常应该在使用事件范围的不同组合函数中共享,但如果在导航内部
我想在相机预览上方创建一个半透明图层,如下所示: 我在我的应用程序中完成了相机预览,我想要的只是在预览上有一个半透明的图层,带有剪裁的卡片形状,如图所示(带有圆角)。 所以:全屏相机预览,上面有一个全
我是一名优秀的程序员,十分优秀!