如何从java活动加载jetpack compose

问题描述 投票:0回答:2

如何从java活动加载jetpack compose?

我有java活动:

@Override
    public void onCreate(Bundle savedInstanceState) {

但是在按钮上单击我想打开@Composable 函数。

我通过java调用它

fun setContent(activity: AppCompatActivity){
        activity.setContent {
                CustomDialog() // contains Dialog
        }
    }

但是这个可组合函数破坏了我之前的看法。

如何在上一个视图中打开此自定义对话框?

android-jetpack-compose customdialog
2个回答
0
投票

只找到这样的解决方案:

class JetPackDialog() : DialogFragment() {
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        return ComposeView(requireContext()).apply {
            setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
            setContent {
                JetPackDialogView()
                }
            }
        }
}

0
投票

在相关帖子中找到答案。我花了几个小时寻找它...... 可以在用 Java 编写的 Activity 中使用/布局 Compose 视图吗?

您不一定需要 AbstractComposeView。我能够做到 这只是与以下内容:

将 ComposeView 添加到您的layout.xml,就像添加任何其他视图一样:

<androidx.compose.ui.platform.ComposeView
     android:id="@+id/compose_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"/>

创建一个新的kt文件,例如ComposeFunctions.kt,它有一个将内容设置为的函数 撰写视图:

@file:JvmName("ComposeFunctions")
 
 package (your package goes here)
 
 fun setContent(composeView: ComposeView) {
     composeView.setContent { composable kt function goes here } }

现在从你的java Activity/Fragment

ComposeView composeView = view.findViewById(R.id.compose_view);
 ComposeFunctions.setContent(composeView); 

我用过这个 在 Androidx.wear.compose.material.TimeText 的 WearOS 上成功运行:

composeView.setContent { TimeText() }

© www.soinside.com 2019 - 2024. All rights reserved.