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

时间:2018-01-14 18:47:05

标签: android android-recyclerview

我有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吗?

3 个答案:

答案 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()