Jetpack Compose - 无虚拟方法集Content

Jetpack Compose - No virtual method setContent

提问人:Tobias Reich 提问时间:11/16/2023 更新时间:11/16/2023 访问量:42

问:

我想将 Jetpack Compose 添加到我的 Android 应用中。 库已经添加(根据教程以及 Google 的示例应用程序)。我使用 Kotlin 1.9.20,编译 JVM 版本是 Java 17。 Activity 是 AppCompatActivity(),因此它应该与 compose 兼容。

build.gradle 文件添加了以下行:

compileOptions {
    sourceCompatibility = 17
    targetCompatibility = 17
}

with(kotlinOptions) {
    jvmTarget = "17"
    languageVersion = 1.9
}

buildFeatures {
    compose = true
}
composeOptions {
    kotlinCompilerExtensionVersion = "1.5.4"
}

以及库的最小版本:

implementation(platform("androidx.compose:compose-bom:2023.10.01"))
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.material:material")
implementation("androidx.compose.ui:ui-tooling-preview")

所以一切看起来都很好。 但是,当我添加composeView时,我得到一个异常,如下所示:

NoSuchMethodError:无虚拟方法 setContent(Lkotlin/jvm/函数/函数0;)V在课堂上 Landroidx/compose/ui/platform/ComposeView;

对于使用 XML 布局的简化代码,在布局中添加 ComposeView,如下所示:

composeView = view.findViewById(R.id.compose_view)
composeView.setContent {
  ...
}

在第一行中,我已经可以看到我的 XML 布局的 composeView。它是一个 ComposeView。只是下一行失败了。

我还尝试将整个片段作为 Compose 的容器。

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        return ComposeView(requireContext()).apply {
           setViewCompositionStrategy(
               ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
            setContent {
                // In Compose world
                MaterialTheme {
                    MyLayout()
                }
            }
        }
    }

我仍然收到同样的错误:

java.lang.NoSuchMethodError: No virtual method setContent(Lkotlin/jvm/functions/Function0;)V in class Landroidx/compose/ui/platform/ComposeView; or its super classes
     (declaration of 'androidx.compose.ui.platform.ComposeView' appears in /data/app/~~XE01rsSoScPaH1MnxHjNsA==/.../base.apk)
     at myFragment.onCreateView(MyFragment.kt:30)
     at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3114)
安卓 gradle android-gradle-plugin android-jetpack-compose

评论


答:

0赞 stan372 11/16/2023 #1

我相信你只需要添加这个依赖项:implementation("androidx.activity:activity-compose")

评论

0赞 Tobias Reich 11/16/2023
谢谢你的建议。我试过了,但它仍然不起作用。仍然收到 ComposeView(而不是 Activity)的 setContent 的“NoSuchMethodError: No virtual method setContent”异常!
0赞 psyill 11/30/2023 #2

我遇到了同样的错误。就我而言,我忘了把

buildFeatures {
    compose true
}

composeOptions {
    kotlinCompilerExtensionVersion my_compose_compiler_version
}

在我的build.gradle中。插入这些行使问题消失了。