Расширение элемента recyclerview

Если я разворачиваю какой-либо элемент в recyclerview, он отлично расширяется, но когда я просматриваю recylerview, я обнаружил, что другие предметы также были расширены, из-за повторного использования потребовался расширенный размер, а не оригинальный

public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.MyViewHolder> implements View.OnClickListener { private LayoutInflater inflater; private Context mcontext; private int mOriginalHeight = 0; private boolean mIsViewExpanded = false; public FeedAdapter(Context context) { inflater = LayoutInflater.from(context); mcontext = context; } @Override public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = inflater.inflate(R.layout.custom_row, viewGroup, false); MyViewHolder holder = new MyViewHolder(view); holder.frame.setOnClickListener(this); return holder; } @Override public void onBindViewHolder(MyViewHolder myViewHolder, int i) { } @Override public int getItemCount() { return 100; } @Override public void onClick(final View v) { if (mOriginalHeight == 0) { mOriginalHeight = v.getHeight(); } ValueAnimator valueAnimator; if (v.getHeight() < (mOriginalHeight + (int) (mOriginalHeight * 1.5))) { valueAnimator = ValueAnimator.ofInt(mOriginalHeight, mOriginalHeight + (int) (mOriginalHeight * 1.5)); } else { valueAnimator = ValueAnimator.ofInt(mOriginalHeight + (int) (mOriginalHeight * 1.5), mOriginalHeight); } valueAnimator.setDuration(300); valueAnimator.setInterpolator(new LinearInterpolator()); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { Integer value = (Integer) animation.getAnimatedValue(); v.getLayoutParams().height = value.intValue(); v.requestLayout(); } }); valueAnimator.start(); } class MyViewHolder extends RecyclerView.ViewHolder { FrameLayout frame; public MyViewHolder(View itemView) { super(itemView); frame = (FrameLayout) itemView.findViewById(R.id.base); } } } 

Так как я могу это исправить, а также есть лучший способ расширить и свернуть элементы?

Я столкнулся с тем же вопросом. Это происходит из-за ViewHolderPattern.

https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder.html#isRecyclable%28%29

Android будет перерабатывать представление, независимо от того, расширилось оно или нет. Поэтому сообщите Android, что, если ваше представление расширено, оно не подлежит вторичной переработке.

В вашем классе ViewHolder добавьте:

 public MyViewHolder(View itemView) { super(itemView); frame = (FrameLayout) itemView.findViewById(R.id.base); frame.setTag(this); // to get a reference to viewholder later on } 

В методе OnClick добавьте:

 @Override public void onClick(final View v) { MyViewHolder holder = (MyViewHolder) v.getTag(); holder.setIsRecyclable(false); if (mOriginalHeight == 0) { mOriginalHeight = v.getHeight(); } ValueAnimator valueAnimator; ... } 

Это должно решить вашу проблему. Не забудьте установить «setIsRecyclable ()» в true снова после того, как представление больше не расширяется, чтобы андроид мог его переработать. Надеюсь, я смогу помочь.

ура

Флорестан