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

如何通过ItemTouchHelper.SimpleCallback从Adapter向Fragment传递数据?

解决方案

1. 更新滑动监听接口

先修改SwipeItemTouchListener,让onSwiped方法支持传递模型ID:

interface SwipeItemTouchListener{
    fun onSwiped(holder: RecyclerView.ViewHolder?, direction: Int, modelId: String) // 按实际ID类型调整(比如Int)
    // 其他方法...
}

2. 自定义ViewHolder存储模型ID

给Adapter定义自定义ViewHolder,添加字段保存当前项的ID:

class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    var modelId: String? = null // 匹配你的ID类型
    // 其他视图绑定逻辑...
}

3. 在Adapter中绑定ID到ViewHolder

更新Adapter的onBindViewHolder以"班store sitevCL�物(负责 SPDX(如果),把当前项的ID赋值给ViewHolder:

class MyAdapter : PagingDataAdapter<MyModel, MyViewHolder>(ModelComparator) {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
        return MyViewHolder(view)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val mymodel = getItem(position)
        mymodel?.let {
            holder.modelId = it.data.id // 将ID赋值给ViewHolder
            // 其他视图绑定逻辑...
        }
    }
}

4. 修改ItemTouchHelperSwipe传递ID

在ItemTouchHelperSwipe的onSwiped方法中,从ViewHolder取出ID再调用接口方法:

class ItemTouchHelperSwipe(private val swipeItemTouchListener: SwipeItemTouchListener): ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.LEFT){
     override fun onSwiped(viewHolder: RecyclerView.ViewHolder,direction:Int)  {
        val myViewHolder = viewHolder as MyViewHolder
        myViewHolder.modelId?.let { id ->
            swipeItemTouchListener.onSwiped(viewHolder, direction, id)
        }
      }
      // 其他重写方法...
}

5. 在Fragment中接收并使用ID

最后更新Fragment的onSwiped实现,直接使用传递过来的ID:

class MyFragment : Fragment(), SwipeItemTouchListener {
   override fun onSwiped(holder: RecyclerView.ViewHolder?, direction: Int, modelId: String) {
       // 这里直接用modelId执行业务逻辑,比如调用ViewModel删除数据
       // 示例:viewModel.deleteItem(modelId)
   }
}

关键注意事项

  • 确保ViewHolder类型强转安全,或直接在接口中传递自定义ViewHolder(更推荐传递具体数据)。
  • Paging3的getItem(position)可能返回null,必须用空安全操作符处理,避免空指针异常。
  • 如果ID类型不是String,需同步调整所有对应位置的类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:54:23