Android 我可以在ViewHolder中存储特定于行的数据吗?
具体来说,我有一个RecyclerView,它显示单击时可以展开的项目。我需要将视图的状态(展开/折叠)存储在某个位置,以便正确调整重用视图的大小 我曾考虑在ViewHolder中存储布尔值(MiseExpanded),但它似乎不起作用,下面是我的代码: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
@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是循环使用的,因此它们无法保存行特定的信息。你需要一个额外的数据结构