首页 > 解决方案 > 适配器 Equivelant 中的 findViewHolderForAdapterPosition 是什么?

问题描述

我有一个带有 16 种不同视图支架类型的自定义适配器。我想在调用方法时获取特定位置的视图持有者。

现在我可以在适配器之外执行此操作

recyclerView.findViewHolderForAdapterPosition(0)

是否可以在适配器内部创建这种效果?

另外澄清一下,我并不是说涉及“onBindViewHolder”的任何内容,因为我希望遍历我的项目列表并从适配器内的各种文本字段和单选按钮中获取详细信息。

关于我的设计的附加编辑:此功能的原因是最后一个视图持有者是一个“提交”按钮。单击时,它会调用一个方法来遍历各种适配器的文本字段和单选按钮以构建自定义对象。然后对活动进行回调。这里将迭代数据的对象上传到服务器

标签: androidandroid-recyclerviewandroid-adapter

解决方案


我不完全确定您的设计是什么,但ViewHolders 应该只显示数据而不包含任何值得迭代的有价值信息。不管:

RecyclerView.Adapter可以同时被多个RecyclerViews 使用,所以没有 1:1 的关系。

如果您仅将它用于一个,您可以保持对您的硬引用recyclerView并调用findViewHolderForAdapterPosition它:

// inside Adapter
private var currentRecyclerView : RecyclerView? = null

override fun onAttachedToRecyclerView(recyclerView : RecyclerView) {
    currentRecyclerView = recyclerView
}

override fun onDetachedFromRecyclerView(recyclerView : RecyclerView){
    currentRecyclerView = null
}

然后你可以使用currentRecyclerView?.findViewHolderForAdapterPosition(Int).


推荐阅读