android - 适配器 Equivelant 中的 findViewHolderForAdapterPosition 是什么?
问题描述
我有一个带有 16 种不同视图支架类型的自定义适配器。我想在调用方法时获取特定位置的视图持有者。
现在我可以在适配器之外执行此操作
recyclerView.findViewHolderForAdapterPosition(0)
是否可以在适配器内部创建这种效果?
另外澄清一下,我并不是说涉及“onBindViewHolder”的任何内容,因为我希望遍历我的项目列表并从适配器内的各种文本字段和单选按钮中获取详细信息。
关于我的设计的附加编辑:此功能的原因是最后一个视图持有者是一个“提交”按钮。单击时,它会调用一个方法来遍历各种适配器的文本字段和单选按钮以构建自定义对象。然后对活动进行回调。这里将迭代数据的对象上传到服务器
解决方案
我不完全确定您的设计是什么,但ViewHolder
s 应该只显示数据而不包含任何值得迭代的有价值信息。不管:
RecyclerView.Adapter
可以同时被多个RecyclerView
s 使用,所以没有 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)
.
推荐阅读
- c# - 使用 BaseEntity 创建一项服务来管理整个 DB、.NET Core、EntityFramework
- android - 将值从片段传递到另一个活动
- c++ - C++中的负数右移运算符
- angular - Kendo UI Grid 将 JSON 对象显示为 [object Object]
- angular - Angular AngularFire2检查用户是否为管理员
- mongodb - 无法链接 mongo docker 容器
- angularjs - angularJS中的服务在控制器中不起作用
- androidx - androidx.appcompat.app.AppCompatActivity 中的 onActivityResult() 在哪里?
- php - 从 URL 获取数组
- ruby-on-rails - 如何从邮件程序调用类方法