簡體   English   中英

從 java 文件調用 Jetpack Compose 元素

[英]Call Jetpack Compose element from a java file

我正在嘗試使用databindingsetContent()在活動中現有的 XML 中使用 Jetpack Compose UI 元素。 這是 xml 元素:

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

我在 kotlin 活動文件中使用了這個語法,它運行順利:

binding.ComposeView.setContent{
    MainActionButtonKt.MainActionButton(true, R.string.complete_job, R.drawable.ic_complete_btn_icon, false);
}

從android的duc得到它

java 活動文件的等效項是什么? 我試圖這樣做:

binding.saveBtnCompose.setContent((composer, integer) -> {
     MainActionButton(true, R.string.complete_job, R.drawable.ic_complete_btn_icon, false);
     return null;
});

但我得到了一個編譯錯誤:

required: boolean, int, Integer, boolean, Composer, int, int
found:    boolean, int, int,     boolean

reason: actual and formal argument lists differ in length

我究竟做錯了什么? 謝謝 !

您可以使用。

在其他任何地方創建 kotlin function

fun setContent(composeView:ComposeView, composeparam1: Boolean){
    composeView.setContent {
        CallYourComposeFunction(composeparam1)
    }
}

然后通過從 xml 提供 composeView 從您的 java 代碼調用它。

基於上述答案,如果您想使用與setContent等效的功能而不需要先設置 xml 布局,您可以像這樣編寫膠水 function:

fun setContentToMyScreen(activity: ComponentActivity, myParam: Boolean) {
    activity.setContent {
        MyScreen(myParam)
    }
}

@Composable
fun MyScreen(myParam: Boolean) {
    ...
}

然后可以從 java 活動中調用它,就像在onCreate中一樣:

setContentToMyScreen(this, true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM