提问人:Tobias Reich 提问时间:11/16/2023 最后编辑:Tobias Reich 更新时间:11/20/2023 访问量:58
Jetpack Compose - 无虚拟方法集Content
Jetpack Compose - No virtual method setContent
问:
我想将 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"
}
我们有一个 buildSrc 项目和项目,并且我们在那里声明了依赖项,如下所示:
dependencies {
implementation("com.android.tools.build:gradle:8.1.2")
...
}
这似乎是问题的原因。当我删除此依赖项并在 settings.gradle.kts 中指定它时,它可以工作。
库的最小版本如下所示:
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/functions/Function0;)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)
答:
我相信你只需要添加这个依赖项:implementation("androidx.activity:activity-compose")
评论
我遇到了同样的错误。就我而言,我忘了把
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion my_compose_compiler_version
}
在我的build.gradle中。插入这些行使问题消失了。
评论