Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用viewmodel和livedata在android中将数据从recyclerview传递到fragment_Android_Android Recyclerview - Fatal编程技术网

如何使用viewmodel和livedata在android中将数据从recyclerview传递到fragment

如何使用viewmodel和livedata在android中将数据从recyclerview传递到fragment,android,android-recyclerview,Android,Android Recyclerview,目前,我正在设计购物车…我使用了回收器视图来显示所有的物品,,, 此外,我在“回收者”视图中有“添加到购物车”按钮,,,每当用户单击“添加到购物车”按钮时,我想增加总物品的计数(总计数按钮位于片段中的“回收者”视图之外),如何将计数值(添加到购物车值)从“回收者”视图发送到该片段…请帮助我。我不熟悉安卓系统 class Myadapter: RecyclerView.Adapter<Myadapter.MyViewHolder>() { var items=ArrayList<

目前,我正在设计购物车…我使用了回收器视图来显示所有的物品,,, 此外,我在“回收者”视图中有“添加到购物车”按钮,,,每当用户单击“添加到购物车”按钮时,我想增加总物品的计数(总计数按钮位于片段中的“回收者”视图之外),如何将计数值(添加到购物车值)从“回收者”视图发送到该片段…请帮助我。我不熟悉安卓系统

class Myadapter: RecyclerView.Adapter<Myadapter.MyViewHolder>() {
 var items=ArrayList<Data>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
    return MyViewHolder(LayoutInflater.from(parent.context).
    inflate(R.layout.new_resource,parent,false))
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
   var image=view.image
   var Addtocart=view.Addtocart
   
 Addtocart.setOnClickListener{
 count++

}
}
override fun getItemCount(): Int {
   return items.size
}
 fun setListData(data:ArrayList<Data>){
this.items=data
classmyadapter:RecyclerView.Adapter(){
var items=ArrayList()
重写CreateViewHolder(父级:ViewGroup,viewType:Int):MyViewHolder{
返回MyViewHolder(LayoutInflater.from)(parent.context)。
充气(右布局、新资源、父资源、假))
}
覆盖onBindViewHolder(holder:MyViewHolder,位置:Int){
var image=view.image
var Addtocart=view.Addtocart
Addtocart.setOnClickListener{
计数++
}
}
重写getItemCount():Int{
返回项目。大小
}
fun setListData(数据:ArrayList){
this.items=数据
}

您可以尝试以下代码:

class MainFragment : Fragment() {

    private val adapter by lazy {
        MainAdapter(
            ::yourFun
        )
    }
    
    fun yourFun (itemPosition: Int) {
        
    }
}
回收商:

class MainAdapter(private val yourFun: (itemPosition: Int) -> Unit) : RecyclerView.Adapter<Myadapter.MyViewHolder>() {

// other code

inner class ItemViewHolder(item: View) : RecyclerView.ViewHolder(item) {

            // other code

            setOnClickListener { yourFun(position) }
        }
    }
class MainAdapter(private val yourFun:(itemPosition:Int)->Unit):RecyclerView.Adapter(){
//其他代码
内部类ItemViewHolder(项:视图):RecyclerView.ViewHolder(项){
//其他代码
setOnClickListener{yourFun(位置)}
}
}

您需要在适配器中使用构造函数的回调来通知viewModel已单击viewHolder。viewModel将收到设置count cart livedata值的通知(例如,UpdateCart CounterLiveData)碎片会更新你的徽章计数器购物车。如何创建回调?解决方案是stackoverflow