为什么要回收视图';当视图被隐藏时,Android中的viewholder是否为空?

为什么要回收视图';当视图被隐藏时,Android中的viewholder是否为空?,android,android-recyclerview,Android,Android Recyclerview,我知道这有点普通。所以我有一个recyclerView,里面有多个可以展开和折叠的项目(每个项目都有一个webview,可以展开和折叠来决定是否需要显示全部内容)。我需要在viewAdapter中设置BiImageView的图像,如下所示 ItemViewHolder viewHolder = (ItemViewHolder) recyclerView .findViewHolderForLayoutPosition(position); viewHolder.r

我知道这有点普通。所以我有一个recyclerView,里面有多个可以展开和折叠的项目(每个项目都有一个webview,可以展开和折叠来决定是否需要显示全部内容)。我需要在viewAdapter中设置BiImageView的图像,如下所示

ItemViewHolder viewHolder = (ItemViewHolder) recyclerView
                .findViewHolderForLayoutPosition(position);
viewHolder.rightIndicator.setImageResources()

然而,它只在每个项目都被折叠时起作用,当第一个项目展开时,它将占据屏幕,其他项目将被隐藏,或者说隐藏在屏幕底部。然后,只有前几个项目可以设置图像资源。对于其他隐藏项,
viewHolder
为空。看起来像是recyclerView从布局中删除了它们,我想知道是否有任何方法可以确保我可以获得viewHolder?要回电话吗?我尝试了
onCreate
onBind
,但是当我向下滚动或折叠第一项时,这两个方法没有被调用

我想,我可以帮助您编写一些伪代码,但我不记得如何在视图模型中使用它。首先,您必须根据您的模型更改中
onBindViewHolder
方法中的所有视图,然后在模型类中必须有字段,例如

boolean expanded = false; // initial state
在onBindViewHolder中:

if (modelsList.get(position).isExpanded()){
//show expanded view
} else {
//show collapsed view
}
之后,可以将onClickListener设置为折叠视图中的某个视图,以展开:

view.setOnClickListener(new OnClickListener(){
public void onClick(View v){
modelsList.get(position).setIsExpanded(!modelsList.get(position).getIsExpanded());
MyAdapter.this.notifyItemChanged(position);
}
当您单击此视图时,您的模型将更改,RecyclerView将使用新数据重新创建绑定到此模型的视图。
希望它能帮助您

onBindViewHolder在每次单元格可见时都会被调用。因此,当您向下滚动查看隐藏项时,适配器将绘制更改。现在的问题是,看起来好像发生了
onBindViewHolder
,当我折叠第一项并向下滚动时,我看不到
onBindViewHolder
再次被调用。我在问题中提到了它,但简称为
onBind
。这取决于您的适配器实现。是否在适配器中使用不同的项目视图类型来折叠/扩展视图并删除/插入项目?@H.Taras这是相同的视图类型,有用于扩展和折叠的XML,通过在viewModel中绑定布尔值来完成