扩大recyclerview项目 [英] expanding recyclerview item
问题描述
如果我在recyclerview中扩展了任何项目,则它可以很好地扩展,但是当我向下滚动recylerview时,我发现其他项目也已扩展,由于回收,它采用了扩展后的尺寸而不是原始尺寸.
if i expand any item in the recyclerview it expands fine but when i scroll down the recylerview i found other items also expanded , due to recycling it took the expanded size not the original one
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);
}
}
}
所以 我该如何解决这个问题,还有一种更好的方法来展开和折叠物品吗?
so how do i fix that and also is there a better way to expand and collapse items ?
推荐答案
我遇到了同样的问题.发生这种情况是由于ViewHolderPattern.
I ran into the same issue. This happens because of the ViewHolderPattern.
无论视图是否展开,Android都会回收视图. 因此,请告诉android,如果您的视图被扩展,则该视图不可回收.
Android will recycle the view, regardlessly if it's expanded or not. So tell android that if your view is expanded, it is not recyclable.
在您的ViewHolder类中添加:
In Your ViewHolder Class add:
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方法中添加:
In Your OnClick Method add:
@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,以便android可以对其进行回收. 希望我能帮上忙.
This should solve Your Problem. Remember to set "setIsRecyclable()" to true again after the view isn't expanded any more so that android can recycle it. Hope I could help.
欢呼声
Florestan
Florestan
这篇关于扩大recyclerview项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!