提问人:ahmed 提问时间:11/13/2023 更新时间:11/13/2023 访问量:39
如何将 Click 事件从父 XML 视图传递到 Jetpack Compose 内部
How to Pass Click events from Parent XML view to inside Jetpack Compose
问:
我有一个用 XML 和 Kotlin 制作的现有应用程序。更新时,我想学习 Jetpack Compose,因此我使用 ComposeView 在父 XML 屏幕中添加了一个 HorizontalPager。
在 XML 中
<androidx.compose.ui.platform.ComposeView
android:id="@+id/my_composable"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="visible"
app:layout_constraintBottom_toTopOf="@+id/divider"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
然后在 Kotlin 我做到了
binding.value.myComposable.setContent {
IntroPager()
}
我的撰写功能
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun IntroPager(){
val pagerState = rememberPagerState(pageCount = {
3
})
Box(modifier = Modifier.fillMaxSize()) {
HorizontalPager(
state = pagerState,
modifier = Modifier.fillMaxSize()
) { page ->
when (page){
0-> Page1("")
1-> Page2("")
2-> Page3("")
else -> Page1(" from else $page")
}
}
Row(
Modifier
.wrapContentHeight()
.fillMaxWidth()
.align(Alignment.BottomCenter)
.padding(bottom = 8.dp),
horizontalArrangement = Arrangement.Center
) {
repeat(pagerState.pageCount) { iteration ->
val color =
if (pagerState.currentPage == iteration) Color(R.color.theme_color_secondary) else Color(R.color.dark_grey)
Box(
modifier = Modifier
.padding(2.dp)
.clip(CircleShape)
.background(color)
.size(16.dp)
)
}
}
}
}
现在,基于屏幕 XML 部分中的一些用户交互,我想从 XML onClickListener 传递一个单击事件,以转到 Compose 中 HorizontalPager 中的下一页。基本上将 XML clickEvent 传递给 Compose。
我找不到任何关于如何实现这一点的文档。
我尝试实现接口回调,但没有成功
答:
0赞
Faruk Karaca
11/13/2023
#1
在开头定义并将其作为参数发送到 。pagerState
setContent
IntroPager
var pagerState = rememberPagerState(pageCount = { 3 })
fun IntroPager(pagerState: PagerState)
使用它进行页面切换
val scope = rememberCoroutineScope()
scope.launch {
pagerState.scrollToPage(value)
}
您必须在 之后添加 xml clickListener。否则,您将收到此错误。setContent
@Composable调用只能在上下文中发生 @Composable
评论