我正试图通过函数AndroidView(viewBlock = { customView})将自定义视图组件包含到撰写部分中,这对于以前的版本有效,但现在对于1.0.0-beta01不起作用了,我找不到新的方法来做到这一点。
代码如下所示:
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val view = inflater.inflate(R.layout.fragment_recipe_lis, container, false)
view.findViewById<ComposeView>(R.id.compose_view).setContent {
Text("This is a compose view inside a layout")
Spacer(modifier = Modifier.padding(10.dp))
CircularProgressIndicator()
Spacer(modifier = Modifier.padding(10.dp))
Text(text = "Neat")
Spacer(modifier = Modifier.padding(10.dp))
val customView = HorizontalDottedProgress(LocalContext.current)
AndroidView(viewBlock = { customView}) // Error here with the function definition
}
return view
}也许你们中的一个知道。谢谢。
发布于 2021-03-17 02:25:53
您必须传递一个工厂,而不是视图的实例。
AndroidView(factory = { HorizontalDottedProgress(it) })或
AndroidView(::HorizontalDottedProgress)如果您需要配置视图,请在后面的lambda中进行配置。
AndroidView(::HorizontalDottedProgress) { customView ->
customView.doSomething()
}阅读文档中的更多内容
发布于 2021-03-17 07:45:21
对于factory,AndroidView构造函数需要一个AndroidView参数:
构成了一个从
factory获得的安卓视图。factory块将被精确地调用一次,以获得要组成的View,并且还保证在UI线程上调用它。
示例:
//option 1
val customView = TextView(LocalContext.current).apply { text = "New Text View" }
AndroidView(factory = { customView })
//option 2
AndroidView({ context -> TextView(context).apply { text = "This is a TextView" } })
//Option 3
var size by remember { mutableStateOf(100) }
AndroidView(::TextView,
Modifier
.background(Color.Blue)) { view ->
view.layoutParams = ViewGroup.LayoutParams(size, size)
view.apply { text = "This is the 3rd TextView" } }
}在您的情况下,您只需使用其中之一:
val customView = HorizontalDottedProgress(LocalContext.current)
AndroidView(factory = { customView })
AndroidView({ context -> HorizontalDottedProgress(context).apply { /* ... */ } })
AndroidView(::HorizontalDottedProgress) { view ->
view.apply { /*..*/ }
}https://stackoverflow.com/questions/66665718
复制相似问题