gpt4 book ai didi

android - RecyclerView - 获取所有现有的 View / View 持有者

转载 作者:IT老高 更新时间:2023-10-28 22:19:02 61 4
gpt4 key购买 nike

我想在显示数据时更新 RecyclerView,在我的例子中,我显示带有或不带标签的图像。

默认情况下,我在创建 View 持有者时设置标签的可见性,这很好,但我希望用户在显示 RecyclerView 时通过菜单更改标签可见性,所以我想要手动更新 RecyclerView 中所有现有 View 的可见性。

我能否以某种方式获取所有现有的 Views?我需要所有,不仅是可见的,我不希望以后回收的 View 不更新...

最佳答案

首先你需要获取所有显示的 View 索引,然后你需要遍历每个 View ,并使用每个 View 的 viewHolder:

final int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();
final int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();
for (int i = firstVisibleItemPosition; i <= lastVisibleItemPosition; ++i) {
ViewHolder holder = (ViewHolder) mRecyclerView.findViewHolderForAdapterPosition(i);
...
}

编辑:似乎它并不总是返回您可能想要处理的所有 ViewHolders。这似乎是一个更稳定的解决方案:

for (int childCount = recyclerView.getChildCount(), i = 0; i < childCount; ++i) {
final ViewHolder holder = recyclerView.getChildViewHolder(recyclerView.getChildAt(i));
...
}

注意:在某些情况下,您可能希望将缓存的 View 数量设置为足够大,以便始终回收相同的 View ,而不是新的 View 。为此,您可以使用类似的东西:

fun RecyclerView.setMaxViewPoolSize(maxViewTypeId: Int, maxPoolSize: Int) {
for (i in 0..maxViewTypeId)
recycledViewPool.setMaxRecycledViews(i, maxPoolSize)
}

示例用法:

recyclerView.setMaxViewPoolSize(MAX_TYPE_ITEM, Int.MAX_VALUE)

关于android - RecyclerView - 获取所有现有的 View / View 持有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34742272/

61 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com