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

Android Kotlin:Fragment收到成功响应后更新RecyclerView指定项

实现购物车成功回调后更新RecyclerView对应商品项

核心问题分析

当前代码点击加入购物车后,虽调用了notifyItemChanged,但存在两个关键问题:一是Adapter的数据源未同步更新购物车数量,二是ViewModel回调的更新逻辑可进一步严谨化。以下是具体修复步骤:


1. 同步Adapter数据源的购物车数量

点击"加入购物车"时,仅修改了局部变量cart_count,未更新Adapter持有的mutableList数据源,导致界面刷新后仍显示旧数据。修改Adapter中的点击事件:

holder.addtocart.setOnClickListener {
    cart_count = ((cart_count ?: 0) + 1)
    // 关键:同步更新数据源中的cart_count值
    mutableList[position].variantsList[0].cart_count = cart_count
    selectpro?.updatepro(
        position,"AddCart",mutableList[position].variantsList[0].id,
        // 传递更新后的cart_count,而非原数据旧值
        cart_count, false, mutableList[position].products.id,
        mutableList[position].products.name.toString(),
        mutableList[position].variantsList[0].measurement.toString() + mutableList[position].variantsList[0].measurement_unit_name.toString(),
        mutableList[position].variantsList[0].image.toString(),
        mutableList[position].variantsList[0].discounted_price.toString(),
        cart_count.toString(),
        stock.toString(),
        mutableList[position].variantsList[0].image.toString(),
        moq.toString(),
        mutableList[position].variantsList[0].measurement_unit_name.toString()
    )
}

2. 优化ViewModel回调中的更新逻辑

Fragment中已调用notifyItemChanged,建议直接通过Adapter实例调用,避免空指针风险(默认已在主线程执行,无需额外切换):

addcartviewModel.cartTableSuccessorNot.observe(viewLifecycleOwner) {
    if(it.toInt() == variant_id) {
        Toast.makeText(context,"Product Updated Successfully",Toast.LENGTH_SHORT).show()
        // 直接通过Adapter更新指定位置,无需通过RecyclerView获取Adapter
        bestSellersAdapter.notifyItemChanged(productPosition)
    } else {
        LoadingUtils.hideDialog()
        Toast.makeText(context,"Failure in Cart Table", Toast.LENGTH_SHORT).show()
    }
}

3. 修正Fragment中ViewModel调用的参数

在Fragment的updatepro方法中,传递给ViewModel的购物车数量应使用更新后的variant_qty,而非原数据旧值:

override fun updatepro(position: Int, type: String, id: Int, cart_count: Int, is_notify: Boolean, product_id: Int, name: String, measurement: String,
                       variant_image: String, price: String, qty: String, stock: String, image: String, moq: String, unit: String) {
    productPosition = position
    variant_id = id
    variant_qty = qty.toInt()
    // 使用更新后的variant_qty作为购物车数量参数
    addcartviewModel.updateVariantTableinRoom(id, variant_qty.toString(), is_notify, product_id)
    addcartviewModel.insertVariantListintoCartTable(id,measurement,price,stock,image,moq,name,variant_image,unit,qty)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:00:22