[英]Call Jetpack Compose element from a java file
我正在嘗試使用databinding
和setContent()
在活動中現有的 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);
}
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.