Jetpack Compose预览在Arctic Fox的1号补丁中停止工作

18

在 AS Arctic Fox 的第一个补丁中,Jetpack Compose 预览停止了工作。

我为所有预览都遇到这个错误 - 即使是之前正常工作的旧预览:

android.content.res.Resources$NotFoundException: Could not resolve resource value: [some hex value]

这个问题有什么快速的解决方法吗?清除缓存和常规操作都没有效果。


编辑:
看起来问题不总是存在。一些预览开始工作了,而其他预览仍然失败。

编辑2:
这是在动态功能模块中发生的,当需要来自主模块的资源或使用painterResource()时(即使要显示的资源来自同一模块)。


我有类似的问题 - 在我的情况下,compose在预览中获取dimensionResource(id = R.dimen.some_value)时出现问题 + 我正在使用预览2。 - Krystian Kaniowski
1
这是在主模块中的问题吗?还是在任何一个模块中?动态特性模块? - Primož Ivančič
是的,我只在动态特性中遇到了这个问题。 - Krystian Kaniowski
我有同样的问题。Image(painter = painterResource(id = R.drawable.flower4))无法工作。 - tonisives
我遇到了与颜色资源相关的相同问题。(动态模块引用应用程序模块资源) - Zimin Byun
我在非动态模块中遇到了这个问题,但是当字符串资源在另一个模块中时。 - Jakoss
4个回答

5

这个问题在 AS Bumblebee,补丁2中得到了修复。

编辑(摘自评论):然后在 Electric Eel | 2022.1.1 版本中再次出现问题,之后在 Flamingo | 2022.2.1 Beta 4 中被修复。


6
也许会出现在Android Studio Electric Eel | 2022.1.1 Patch 1中,或者类似的问题是,在每次更改后需要手动刷新预览才能消除此错误。请注意不要改变原意。 - Renetik
1
已修复于 Android Studio Flamingo | 2022.2.1 Beta 4 版本。 - Timur Gilfanov

3

我在使用dynamic-modules项目时遇到了同样的问题。受到上面回答的启发,我制作了另一个临时解决方案,在等待Compose团队修复之前使用。

import androidx.compose.ui.res.stringResource as originalStringResource

@Composable
@ReadOnlyComposable
fun stringResourceSafe(@StringRes id: Int): String =
    if (BuildConfig.DEBUG) {
        val resources = LocalContext.current.resources
        try {
            resources.getString(id)
        } catch (e: Resources.NotFoundException) {
            "missing res."
        }
    } else {
        originalStringResource(id)
    }

0

对我来说,在模拟器上运行应用程序后它开始工作了(2022.1.1)


-1

作为一个临时的hack解决方法,我这样做来避开错误并预览UI元素。

//import androidx.compose.ui.res.stringResource

fun stringResource(id: Int): String {
    when (id) {
        R.string.res_id -> return "Foo"
        ...
    }
    return "missing res_id"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接