android – 扩展recyclerview项目

android – 扩展recyclerview项目,第1张

概述如果我展开recyclerview中的任何项目扩展正常,但当我向下滚动recylerview我发现其他项目也扩大,由于回收它采取扩大的尺寸而不是原来的 public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.MyViewHolder> implements View.OnClickListener { priv 如果我展开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方法中添加:

@OverrIDepublic voID onClick(final VIEw v) {   MyVIEwHolder holder = (MyVIEwHolder) v.getTag();   holder.setIsRecyclable(false);    if (mOriginalHeight == 0) {        mOriginalHeight = v.getHeight();    }    ValueAnimator valueAnimator;    ...}

这应该解决你的问题.
记得在视图不再展开后再次将“setIsRecyclable()”设置为true,以便androID可以回收它.
希望我能提供帮助.

干杯

弗洛雷斯坦

总结

以上是内存溢出为你收集整理的android – 扩展recyclerview项目全部内容,希望文章能够帮你解决android – 扩展recyclerview项目所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1145449.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存