如何通过Override方法或功能外部更新JetPack组合UI
我根据需要将较旧的XML UI转换。 在那里, 我无法通过JetPack Compose UI更新我的Override功能。 在一些研究中,我看到许多网站显示记住功能有助于状态更新, 但, 至于我的情况。 我需要通过在另一类中实现的覆盖函数来更新我的UI。
private lateinit var materialList: List<Material>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState == null)
viewModel.initFilters(initText, initFilters)
materialpresenter.attachView(this, lifecycle)
materialList= listOf()
setContent {
FilterBox(materialList)
}
}
@Composable
fun FilterBox(materialList: List<Material>) {
var selectedIndex by remember { mutableStateOf("0") }
val onItemClick = { index: Int -> selectedIndex = "0" }
FlowRow(
modifier = Modifier.padding(top = 14.dp),
mainAxisAlignment = MainAxisAlignment.Start,
crossAxisSpacing = 8.dp,
mainAxisSpacing = 4.dp
) {
materialList.forEach { hashTag ->
if (selectedIndex == hashTag.id) {
FilterSelectionItemText(
hashTag.slug, index = 0,
onClick = onItemClick
)
} else {
FilterUnSelectionItemText(
hashTag.slug, index = 0,
onClick = onItemClick
)
}
}
}
}
override fun onMaterials(list: List<Material>) {
print("list :-" + list)
materialList = list
}
我想通过我的 Composobable UI更新我的 Onmaterials 功能。 因为当我将其打印时,它的打印数据正确,但我的UI没有更新。
I am converting my older XML UI as per requirement.
in there,
I am unable to update by Jetpack compose UI by my override function.
In some research I see many websites shows remember function helps for state update,
but,
as for my situation.
I need to update my UI by the override function that I implemented in another class.
private lateinit var materialList: List<Material>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState == null)
viewModel.initFilters(initText, initFilters)
materialpresenter.attachView(this, lifecycle)
materialList= listOf()
setContent {
FilterBox(materialList)
}
}
@Composable
fun FilterBox(materialList: List<Material>) {
var selectedIndex by remember { mutableStateOf("0") }
val onItemClick = { index: Int -> selectedIndex = "0" }
FlowRow(
modifier = Modifier.padding(top = 14.dp),
mainAxisAlignment = MainAxisAlignment.Start,
crossAxisSpacing = 8.dp,
mainAxisSpacing = 4.dp
) {
materialList.forEach { hashTag ->
if (selectedIndex == hashTag.id) {
FilterSelectionItemText(
hashTag.slug, index = 0,
onClick = onItemClick
)
} else {
FilterUnSelectionItemText(
hashTag.slug, index = 0,
onClick = onItemClick
)
}
}
}
}
override fun onMaterials(list: List<Material>) {
print("list :-" + list)
materialList = list
}
I want to update my FilterBox Composable UI by my onMaterials function.
because when I am print this this its printing data properly, but my UI is not updating.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
要更新可复合的UI,您首先需要持有数据的状态
因为在此示例中发生某些状态 /数据更改时,可组合函数正在更新,
您的数据是
材料列表:list&lt;材料&gt; < / code>
您需要使用状态 /可变状态 /可变状态列表包装数据(用于列表)
将您的列表更改为statelist或mutableState ...
从
setContent
可复合的compososable收集您的数据,例如:从覆盖方法中更新状态。
To update composable UI you first need state which holds data
because composable functions are updating when there is a some state/data changes
in this example your data is
materialList: List<Material>
You need to wrap your data with state / mutable state / mutable state list (for lists)
Change your list to stateList or mutableState...
Collect your data from state in
setContent
composable like:Update state from overridden method.