如何通过Override方法或功能外部更新JetPack组合UI

发布于 2025-01-21 22:58:34 字数 1635 浏览 3 评论 0原文

我根据需要将较旧的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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你如我软肋 2025-01-28 22:58:34

要更新可复合的UI,您首先需要持有数据的状态
因为在此示例中发生某些状态 /数据更改时,可组合函数正在更新,

您的数据是材料列表:list&lt;材料&gt; < / code>

您需要使用状态 /可变状态 /可变状态列表包装数据(用于列表)

将您的列表更改为statelist或mutableState ...

private val materialList: MutableState<List<Material>> = mutableStateOf(emptyList())

setContent可复合的compososable收集您的数据,例如:

val myList: List<Material> by materialList // here you will get updated last data as List<Material>

FilterBox(myList)

从覆盖方法中更新状态。

  override fun onMaterials(list: List<Material>){
        materialList.value = list // your updated List
    }

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...

private val materialList: MutableState<List<Material>> = mutableStateOf(emptyList())

Collect your data from state in setContent composable like:

val myList: List<Material> by materialList // here you will get updated last data as List<Material>

FilterBox(myList)

Update state from overridden method.

  override fun onMaterials(list: List<Material>){
        materialList.value = list // your updated List
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文