You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将带参数的Fragment加载函数传递给独立Jetpack Compose列表组件

解决方案

核心思路是通过函数类型参数做事件回调,把点击事件从独立Composable向上抛给Fragment处理,不需要让Composable依赖Fragment的loadFragment方法,符合Jetpack Compose的状态提升规范,完全解耦UI组件和业务逻辑。


步骤1:修改独立文件中的ListeCarteÉvénements定义

给组件新增一个接收点击事件的参数,类型为(Événement) -> Unit,用于把被点击的事件对象回传给调用方,修改后的代码可直接放到和CarteÉvénement同个独立文件中,不需要依赖Fragment:

@Composable
fun ListeCarteÉvénements(
    événements: List<Événement>,
    // 新增点击回调参数
    onÉvénementClick: (Événement) -> Unit
) {
    LazyColumn {
        items(événements) { e ->
            CarteÉvénement(
                événement = e,
                clickEvent = { onÉvénementClick(e) }
            )
        }
    }
}

步骤2:修改Fragment中调用ListeCarteÉvénements的逻辑

在Fragment里调用组件时,把跳转逻辑通过回调参数传入即可,不需要改动原有loadFragment方法:

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    return inflater.inflate(R.layout.fragment_liste_evenement,container,false).apply {
        val listeEvens : ArrayList<Événement> = ArrayList<Événement>()
        listeEvens.add(évén)
        listeEvens.add(évén2)
        listeEvens.add(évén3)
        val composeView = findViewById<ComposeView>(R.id.listeBlocsEven)

        composeView.setContent {
            ListeCarteÉvénements(
                événements = listeEvens,
                // 传入点击事件处理逻辑
                onÉvénementClick = { clickedÉvénement ->
                    loadFragment(details_evenement(clickedÉvénement))
                }
            )
        }
    }
}

后续如果需要调整跳转逻辑,或者在其他场景复用这个列表组件,只需要修改上层传入的回调逻辑即可,不需要改动列表组件本身的代码。

内容的提问来源于stack exchange,提问作者MTL Mars

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:06:04