在 RecyclerView.Adapter 中的位置获取对 ViewHolder 的引用



我有一个显示项目列表的RecyclerView。此列表中的一个项目应该是我当前的项目(int),该项目应该展开。为此,我ViewHolder expand()了这种方法。我想在currentItem == position时调用此方法。

我以为我可以这样做:

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    final WorkoutExcersiseHolder excersiseHolder = (WorkoutExcersiseHolder) holder;
    excersiseHolder.expand(currentExcersisePointer, position);
    if (currentItem == position) {
        excersiseHolder.expand();
    }
}

但是,每个项目都会被扩展。那么是否可以在我的RecyclerView.Adapter中仅在一个位置获得对 ViewHolder 的引用?

当条件为 false 时,您应该隐藏该项目。

if (currentItem == position) {
    excersiseHolder.expand();
} else {
    excersiseHolder.collapse();
}

当您更改当前项的值时,您应该使用旧值和新值调用 notifyItemChanged((。

notifyItemChanged(currentItem);
currentItem = newPosition;
notifyItemChanged(currentItem);
您必须将

当前项目编号绑定到用于填充RecyclerView的模型。在你的情况下,我想它是WorkoutExcersiseHolder类,它应该有类似isCurrent()方法的东西,这将有助于onBindViewHolder决定是否扩展它。使用逻辑更新模型列表,然后使用RecyclerView.Adapter方法notifyItemChanged。 请注意,也不要使用position参数来引用当前ViewHolder,而是尝试使用 holder.getAdapterPosition()

视图持有者对象传递给展开方法,然后在展开方法中抛出此对象

最新更新