【问题标题】:RecyclerView findViewHolderForLayoutPosition and findViewHolderForAdapterPosition returns nullRecyclerView findViewHolderForLayoutPosition 和 findViewHolderForAdapterPosition 返回 null
【发布时间】:2019-10-18 12:28:44
【问题描述】:

我只是想让我的视图持有者在屏幕上看到,但方法 findViewHolderFor* 几乎总是被赋予空对象。

我的适配器中的代码:

fun getVisibleViewHolder(recyclerView: RecyclerView) {
    for (i in 0 until recyclerView.childCount) {
        val viewHolder = recyclerView.findViewHolderForLayoutPosition(i) // null: most of the time (specially when scroll performed)
        val viewHolder = recyclerView.findViewHolderForAdapterPosition(i) // idem
    }
}

有时它会起作用,但很少见。

【问题讨论】:

  • RecyclerView 在项目离开屏幕后立即回收视图。因此,如果我们为屏幕外的视图调用 findViewHolderForAdapterPosition(),我们会得到一个空值。
  • 是的,这部分没有问题,我试图获得的视图在屏幕上。 (就像我说的:我只是想让我的视图持有者在屏幕上看到
  • 你什么时候打电话? getVisibleViewHolder 也分享该代码。
  • 当我点击一个按钮时,在 onBackPressed 之前

标签: android android-recyclerview android-viewholder


【解决方案1】:

所以我找到了解决方案!和解释。 recyclerView.childCount = 父元素中明显与位置不同的元素个数!

    for (i in 0 until recyclerView.childCount) {
        val view = recyclerView.getChildAt(i)
        val viewHolder = recyclerView.findContainingViewHolder(view)
        ... // the purpose, getting the data from the user here
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2021-08-04
    相关资源
    最近更新 更多