我有RecyclerView
,显示项目列表。此列表中的一个项目应该是我的currentItem (int)
,该项目应该展开。为此,我在expand()
中使用了此方法ViewHolder
。我希望在currentItem == position
为。{/ p>时调用此方法
我以为我可以这样做:
@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吗?
答案 0 :(得分:1)
当条件为假时,您应隐藏该项目。
if (currentItem == position) {
excersiseHolder.expand();
} else {
excersiseHolder.collapse();
}
当您更改currentItem的值时,您应该使用旧值和新值调用notifyItemChanged()。
notifyItemChanged(currentItem);
currentItem = newPosition;
notifyItemChanged(currentItem);
答案 1 :(得分:0)
将视图持有者对象传递给expand方法,然后展开在expand方法中抛出此对象
答案 2 :(得分:0)
您必须将当前的项目编号绑定到用于填充RecyclerView
的模型。在你的情况下,我猜它是WorkoutExcersiseHolder
类,它应该有isCurrent()
方法,这将有助于onBindViewHolder
决定是否扩展它。使用您的逻辑更新模型列表,然后使用RecyclerView.Adapter
方法notifyItemChanged
。为了便于说明,也不要使用position
参数来引用当前ViewHolder
,而是尝试使用holder.getAdapterPosition()