gpt4 book ai didi

android - 如何将数据从 Adapter 发送到 ViewModel 再到 Fragment

转载 作者:行者123 更新时间:2023-11-29 02:20:26 25 4
gpt4 key购买 nike

我的结构是这样的,在 Fragment 中我调用了 ViewModel 来实例化 Adapter

对于我的 RecyclerView 中的每个项目,我都有一个可以收听的按钮

binding.addItem.setOnClickListener(onAddItemClicked(product))

private fun onAddToQuoteClicked(product: Product): View.OnClickListener {
return View.OnClickListener {
// TODO add item
}
}

我不知道如何将这个项目数据发送到 fragment ,有没有办法做到这一点?

我应该在 AdapterViewModel 之间以及在 ViewModelFragment 之间使用接口(interface)吗?

或者我可以使用 RxEventRxBus 吗?

最佳答案

首先用于 ViewModel 和 Fragment 之间的导航 -

  • 您可以使用 RxJava PublishSubject 使其公开并在您的 Fragment 中订阅它,它可以使用 ViewModel 的公共(public)方法。
  • 或者你可以使用一个接口(interface),在我看来更好,因为使用接口(interface)你使用更简单的逻辑,在这种情况下错误更少,而且它是更干净的代码,因为你可以根据需要命名接口(interface)中的方法 - 更容易阅读。

其次是 Adapter 和 Fragment 之间的通信 - 您可以使用与上述相同的策略。在这种情况下,我建议使用 RxJava,因为通常您只需要处理一个或几个点击监听器(例如,对于发出一些数据对象的可观察对象)。
如果您需要一些代码示例,请在评论中给我发短信

更新 - 更好的做法是在 View 中创建适配器实例,因为我假设您使用的是 MVVM 设计模式(其中所有与 UI 相关的代码必须位于 View 组件中)。

示例 fragment - 适配器通信 Rx - PublishSubject
在您的适配器

     private val publisher = PublishSubject.create<Product>()
fun getObservableProductItem(): Observable<Product> = publisher.hide()

binding.addItem.setOnClickListener(onAddItemClicked(product))
private fun onAddToQuoteClicked(product: Product): View.OnClickListener {
return View.OnClickListener {
publisherRideItem.onNext(items[adapterPosition])
}
}

override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) {
publisherRideItem.onComplete()
}

并在您的 fragment

 compositeDisposable.add(adapter.getObservableProductItem().subscribe {
//TODO do whatever you want with it
})

override fun onDestroy() {
super.onDestroy()
compositeDisposable.clear()
}

关于android - 如何将数据从 Adapter 发送到 ViewModel 再到 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56336566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com