Android 我可以在ViewHolder中存储特定于行的数据吗?

Android 我可以在ViewHolder中存储特定于行的数据吗?,android,expand,android-recyclerview,Android,Expand,Android Recyclerview,具体来说,我有一个RecyclerView,它显示单击时可以展开的项目。我需要将视图的状态(展开/折叠)存储在某个位置,以便正确调整重用视图的大小 我曾考虑在ViewHolder中存储布尔值(MiseExpanded),但它似乎不起作用,下面是我的代码: @Override public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int pos) { final PetrolStation

具体来说,我有一个RecyclerView,它显示单击时可以展开的项目。我需要将视图的状态(展开/折叠)存储在某个位置,以便正确调整重用视图的大小

我曾考虑在ViewHolder中存储布尔值(MiseExpanded),但它似乎不起作用,下面是我的代码:

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int pos) {
    final PetrolStation station = this.mData.get(pos);
    final PetrolStationRowHolder rowHolder = (PetrolStationRowHolder) viewHolder;
    rowHolder.setExpanded(rowHolder.isExpanded());
}
以下代码位于我的ViewHolder中:

public FrameLayout rowContainer; // The root layout of the row
private boolean mIsExpanded; // Stores whether this view is expanded

public void setExpanded(final boolean expanded){
    if(mExpandedLayoutHeight != 0 && mCollapsedLayoutHeight != 0) {
        if (expanded) {
            rowContainer.getLayoutParams().height = mExpandedLayoutHeight;
            mIsExpanded = true;
        } else {
            rowContainer.getLayoutParams().height = mCollapsedLayoutHeight;
            mIsExpanded = false;
        }
        rowContainer.setLayoutParams(rowContainer.getLayoutParams());
    }
}

private boolean isExpanded() {
    return mIsExpanded;
}

当我滚动时,我希望所有视图的大小都正确,但事实并非如此。如果我通过onClick展开一个视图,然后滚动,则会有多个展开的视图,而不是一个。

好的,我在此期间所做的一个解决方法是将所有展开的状态(isExpanded)存储在适配器的SparseArray中


这是可行的,但我仍然想知道是否可以在viewHolder中存储行相关元数据(扩展状态等),或者是否必须为其创建新的数据结构。

viewHolder是循环使用的,因此它们无法保存行特定的信息。你需要一个额外的数据结构