我有一个显示项目列表的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()
视图持有者对象传递给展开方法,然后在展开方法中抛出此对象