如何将带参数的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
相关产品推荐
相关产品推荐

